[EHS6] I2C hanging slave problem | Telit Cinterion IoT Developer Community
July 24, 2017 - 9:26pm, 5548 views
At the moment it looks like I have a very rare problem. I use the EHS6 modem in combination with an I2C GPIO expander. This looks to work fine! But I also reboot the terminal once in the 24 hours and I have the feeling that this could cause the I2C GPIO expander slave IC in a infinity listening state. And the initializing of the I2C chips fails...
The problem is that this IC is not resetten by a reboot of the EHS6 module. Is there any way to 'reset' the bus? (By toggling the SDA or SCL lines?)
At the moment I have more than 1000 modems which random have this problem :(
could you explain what is the procedure of module reboot? Are you sure that I2C is inactive at this moment? As I understood, I2C expander is powered all the time, even at the moment of resetting EHS6 modem?
Yes, the module is rebooted by AT+CFUN=1,1. And this will not powercycle the I2C expander.
Could you send part of schematics with this I2C line and tell what GPIO expander do you use? Could you also specify how ofted it happens? As I tested, there should not be any problems on I2C interface while reboot (it should not generate any glitches which may trigger GPIO expander to listen).
Thanks for your reply!
I do not have the schematics because we do not develop this piece of hardware. Every week a few modules. But hat happens if the GPIO expander is in listening ***** AND then the EHS6 is rebooted? It looks like that then the GPIO expander will wait forever listening...
Also I found out that toggling the SCL line a few ***** SHOULD reset the bus and slave. The idea is to configure the I2C pins as GPIO, at starting up, toggle them, then configure them as I2C (AT^SCFG) and then opening the I2CConnection in Java. Can this work?
Our is there any other approach for resetting the bus? The I2CConnection class is rather limited :(
Why do you want to do this that way? I think that you can toggle lines by sending 0b01010101 on I2C (clock and data lines will change states).
But still I have a question here:
"But hat happens if the GPIO expander is in listening ***** AND then the EHS6 is rebooted?"
So - module ends transmission and then is rebooting, or it is doing reboot blindly? Is the stop byte sent on I2C? Do you have an access to logic analyzer? What model of expander do you use?
Because the modems are used on remote locations I'm using the AT^SCFG exec commando to reboot the modem daily. In the TC65i manuel this was a recommandation. So I also do this in the EHS6. And now I'm suspecting that this might cause the slave to hang.
I will check which expander it is.
By sending 0b01010101 how do you ment to do this? Using the I2CConnection and OutputStream to send "<a0055>"?
That was probably the Tomsz's idea. Have you tried?
But generally this seems to be a design problem if reboot of the module does not reboot the extender (which is needed) or there is no solution to initiate the extender reboot from the module.
By sending 0b01010101 how do you ment to do this? Using the I2CConnection and OutputStream to send "<a0055>"? - yes, that is exacly what I meant. Please let me know if you will find which expander is used, then we will be able to investigate this more deeply.
By the way - in case of EHS6 you do not have to reset it once a day