3

First of all: sorry for the title, I don't know how to describe further...


Background:

I'm working with the RDA5807M FM receiver chip. It worked fine for at least one month now. I just had jumper wires as connection, and now that the software is finished and I also have all hardware components ready I soldered wires onto an adapter for the GPIOs.

Accidentally from then I got strange results from i2cdetect:

$ i2cdetect -y 1

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: 10 11 -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --    

Before it was correct:

$ i2cdetect -y 1

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: 10 11 -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: 60 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --  

As you can see, the chip is responding on the addresses 0x10 and 0x11, but not on 0x60, which is the address for TEA5767 compatible mode.

Just strange:

I got it then working again for a short time by reordering the wires, and then it stopped working again. Then I found out i2cdetect will find the chip under address 0x60 when I put the I2C bitrate to 2kHz or higher, but then the chip can't be controlled over i2cget, i2cset or the Python smbus library anymore.

Now after I had the Pi on for the half day but idle (I was not using it) I happily saw, that the chip is working again, even after a reboot.

Conclusion:

  • Worked fine for a long time
  • Stopped working
  • Wires reordered, worked again for a short time
  • Stopped working again
  • Chip is now detectable with higher I2C bitrate only
  • Working again after some time being idle

Can someone explain this strange behaviour at least in small parts (even if it's working for now)?

linusg
  • 442
  • 6
  • 17
  • 1
    You are unlikely to get much of an answer here. I have an I2C FM transmitter that is very fickle in vaguely similar ways, e.g., it sometimes won't show up unless another I2C device is on the bus, often won't show up at all unless the power voltage matches the logic (although by the spec they should not have to), and may require repeated toggling of a reset pin to show up (contra spec). It did not start out that way (I've had it for ~3 years, and it suffered some electrical abuse from me at least once). I think someone with the skill set to investigate would consider it a serious task. – goldilocks Jan 02 '17 at 14:10
  • 1
    @goldilocks - Thanks for your reply, I thought this post was actually overlooked... Can you explain what you mean with ...power voltage matches the logic? – linusg Jan 02 '17 at 14:14
  • 1
    It uses 3.3V logic exclusively, but can be powered with either 3.3V or 5V. The latter gives a stronger transmission, but although I had it attached that way for at least a year, I now no longer bother -- most of the time it just doesn't show up on the bus unless powered at 3.3V. – goldilocks Jan 02 '17 at 14:25
  • 1
    Ah OK, now I uderstand :) I simply can do nothing but pray for it to work I think... – linusg Jan 02 '17 at 14:26
  • since you have not mentioned which RPi you have, This one is for RPI2B , add a pull up register of 3.3K on SDA and SCL and try – MaNyYaCk Jul 19 '18 at 06:01
  • Chip is now detectable with higher I2C bitrate only This is more like an electronics hardware issue with the register being used on the i2c line rather than a RPi's issue – MaNyYaCk Jul 19 '18 at 06:06
  • Seriously? No, I won’t try, as the project is dead for a looong time. ;-) – linusg Jul 19 '18 at 14:04

1 Answers1

2

Strange I2C behaviour ... sorry for the title, I don't know how to describe further

Well, in the last couple of months playing with a couple of I2C devices, I have been in the same trouble as yours. First,a more specific title could be "A Intermittently Unreliable I2C Device Address Detection Problem".

Accidentally from then I got strange results from i2cdetect: $ i2cdetect -y 1

At first I found the intermittent unstable i2cdetect results strange. After troubleshooting for a very long while, I found three main causes:

(1) Too many devices on the same I2C bus, resulting the equivalent pullup resistance too strong for the Rpi I2C circuit can handle. Rpi I2C already has built in 1k8 pullup, but adding more and more devices even with usual weaker 10k or 4k7 pullups could push Rpi over its limit, causing "strange" performance,

(2) Too long connecting wires, say more than 30cm, casually laid out, without twisting pair configuration etc, beside acting as an antenna, picking up noise nearby, increase total capacitance, again over the impedance driving limit of Rpi or its buffer friend such TSX/TBX010x.

(3) Individual devices are themselves unstable. I once tested ten I2C MCP23017s, from a couple of difference shops, some through hole, some SMD breakouts. I found some are good guys with almost zero percent problem. Some are bad guys, with over 80% percent chance causing trouble, by themselves or in a group. And there are middle of the road.

I think someone with the skill set to investigate would consider it a serious task. – goldilocks2017jan02
I simply can do nothing but pray for it to work ... – linusg 2017jan02

Ages ago I completed a 3 year full time electronics engineering diploma from a vocational college, and then earned my living as a maintenance technician, troubleshoot electronics hardware day after day. I got bored very soon and was not getting serious at my task, and prayed every morning that no broken equipment to fix that day, ...

tlfong01
  • 4,665
  • 3
  • 10
  • 24
  • After over 2 years finally an answer - thanks! I still suck at electronics (I'm a software dev FWIW), but I'll keep your observations in mind for the future. I'm aware that cable lenght might become problematic, but for example I didn't think about twisting the cables. IIRC I had only this one I2C device connected, so that shouldn't have been the problem. – linusg Mar 25 '19 at 12:36