nodemcu / nodemcu-firmware

Lua based interactive firmware for ESP8266, ESP8285 and ESP32
https://nodemcu.readthedocs.io
MIT License
7.62k stars 3.12k forks source link

Fix i2c.setup() for pins >= 32 #3600

Closed tomsci closed 1 year ago

tomsci commented 1 year ago

pin_bit_mask in i2c_sw_master.c is a 64bit value and the current code shifts an int sized 1, so doesn't work for any pin numbers >= 32 because it's only shifting a 32-bit value. The upshot is software i2c doesn't work (on the default pins) on esp32s2 and later and probably some others too.

This change fixes that, by using a 64-bit 1 meaning the pin_bit_mask gets correctly set even for pin numbers above 32.

Tested on adafruit feather esp32s2 using pins 41 and 42 (Sda and Scl)

tomsci commented 1 year ago

Any chance you could look at this one while you're here @jmattsson? :D

jmattsson commented 1 year ago

Yep! Thanks for the fix!