I've been playing around with I2C for a couple days now with a DE10-Nano dev board: I'm implementing an I2C master in CLaSH so that I can talk to the HDMI encoder chip, but for now I'm talking to an Arduino Due for easy debugging. The way I've been doing that is to use the SCL and SDA pins on the Arduino header of the DE10-Nano and connect that to the SCL and SDA pins on the Due with pullups.
I had versions that worked and versions that didn't; but at some point it just started not to work at all. Even with previously-working versions.
I managed to isolate the problem to the SCL pin: if I use a different pin on the FPGA for SCL, then everything works again. This makes me think I might have managed to kill the SCL pin.
How do I go about proving or disproving this? I tried outputting either 1 or 0 on the SCL pin and looking at it with a multimeter, and I see the correct voltage; I tried using the SCL pin as an input and connecting it to one of the builtin LEDs on the board, then feeding it 0 or 3.3 V, and I can see the LED light up or not.
Another thing I tried (based on this suggestion) is comparing the driver strength to a pin which seems to work:
Against 4.7k pulldown to GND:
- "Good" pin: 3.21V
- "Bad" pin: 3.19V
Against 4.7k pullup to 3.3V:
- "Good" pin: 0.1V
- "Bad" pin: 0.16V
Resistances (with the board powered down):
- "Good" pin: 1.2k
- "Bad" pin: 0.95k
- "Good" pin: 1.5k
- "Bad" pin: 1.2k