WP8548 I2C bus lock up when read ADC2 and ADC3


#1

Hello,

I have this problem several months ago. In my program, the I2C lock up in a few minutes or hours.

I use I2C bus to read two external chips and I need to read the four internal ADCs.

In this document, they talk about this problem on page number 34:

https://source.sierrawireless.com/resources/airprime/software/release_notes/wpx5xx-release-16,-d-,1-customer-release-notes/

It says that the problem was solved in release 13, but I’m using de 16.1 release and I have de same problem.

I have done a basic program in which only read the ADC2 and 3, and read an external i2C chip periodically. I run this program in Mangoh Green and the I2C bus lock up in about 10 minutes.

Anyone had this problem? What can I do? Is Sierra going to fix this error?


#2

Hi,

I’m having the same problem you described using release 16.1, MCU 002.004.

If I keep reading an external i2c address or I keep reading an adc in a loop, it take a long time before i2c hangs. If I don’t i2c hangs in roughly a few to 10 minutes.

I have the exact same issue using WP7502 and WP7702!

Did you find a solution?


#3

hello!
No, I haven’t found a solution…
I await Sierra’s answer.
Do you hang it in a few minutes if you read in a timer?


#4

this is what i have found out so far.
Running an application which reads out adc and an external accelerometer every 2 seconds and reads out the temperature every minute. Then the i2c bus hangs after roughly 10 minutes.

Running an application which reads out adc every 2 seconds and reads out the temperature every minute. Then the i2c bus hangs after roughly 10 minutes.

Running an application which reads out adc every 2 seconds and reads out the temperature every minute. And i have a loop at command line which continuously reads out something (cm adc read EXT_ADC2 or an i2cget …) every second or faster. Then the i2c bus stays alive.
Strange!

If i don’t do anything with the i2c bus. Then the i2c bus stays alive.

I am wondering if it has something to do with the powerdown/sleep of the MCU at address 0x3A.

What I can measure is that the whole i2c protocol works as expected.
However, when the bus fails. It fails with the error:
qup_i2c qup_i2c.0: i2c_scl: 1, i2c_sda: 1
qup_i2c qup_i2c.0: Bus still busy, status 132100
qup_i2c qup_i2c.0: Transaction timed out, SL-AD = 0x3A
qup_i2c qup_i2c.0: I2C Status: 132100
qup_i2c qup_i2c.0: QUP Status: 0
qup_i2c qup_i2c.0: OP Flags: 10

And if i measure the SCL and SDA line I can see that they are both high, SCL asserted low as start, but SDA also goes low. Then both immediatly return high. Meaning a bus busy condition which it cannot recover from.


#5

I don’t have time this weekend but I thing I am going to investigate some time in this topic:
https://community.nxp.com/thread/316813


#6

Yes… it looks that a I2C internal slave inside WP85 is hang up and the sistem can’t reset it.
If you read the ADC 2 and ADC3 and a external I2C whit the address doesn’t exist, the bus too hang. I think that de problem is internal.
Why does it hang? Is periodic, isn’t noise, isn’t external hardware.
How do the internal I2C devices reset without restarting all the module? I don’t know…


#7

In order to find the cause of this problem I turned on more debug information using the yocto build.
With menuconfig one can turn on “I2C Core debugging messages” and “I2C Bus debugging messages”.

Strange enough, my program is running stable for over two hours now…
The downside is that this uses extra processing time.

The problem might be a timing issue in the driver?


#8

30/5000

well, sooner or later it will fail. It’s a good idea. I didn’t know this. This will give us more information, but I don’t know if it will has solution or is a problem for Sierra. They don’t respond at the moment… it is a known problem for them.
We’ll see what happens
Greetings


#9

Hi,

Yes after 3 hours it failed. using the debug information I would guess it could be an IRQ issue in the driver.
When I read and address from an i2c device using i2cget -y 0 0x19 0x31, I get the following dmesg output:

When everything works good:

[ 139.488264] i2c i2c-0: ioctl, cmd=0x705, arg=0xbe8b7ba4
[ 139.488325] i2c i2c-0: ioctl, cmd=0x703, arg=0x19
[ 139.488356] i2c i2c-0: ioctl, cmd=0x720, arg=0xbe8b7b80
[ 139.488386] i2c i2c-0: master_xfer[0] W, addr=0x19, len=1
[ 139.488417] i2c i2c-0: master_xfer[1] R, addr=0x19, len=1
[ 139.488478] qup_i2c qup_i2c.0: Polling for state:0x0, or valid-only:0
[ 139.488509] qup_i2c qup_i2c.0: Polling for state:0x10, or valid-only:0
[ 139.488539] qup_i2c qup_i2c.0: Qup config is :0x20f
[ 139.488539] qup_i2c qup_i2c.0: Qup state is :0x1c
[ 139.488570] qup_i2c qup_i2c.0: Qup mode is :0xa5
[ 139.488600] qup_i2c qup_i2c.0: Polling for state:0x0, or valid-only:1
[ 139.488631] qup_i2c qup_i2c.0: Polling for state:0x1, or valid-only:0
[ 139.488631] qup_i2c qup_i2c.0: Qup config is :0x20f
[ 139.488661] qup_i2c qup_i2c.0: Qup state is :0x1d
[ 139.488692] qup_i2c qup_i2c.0: Qup mode is :0xc0a5
[ 139.488722] qup_i2c qup_i2c.0: Polling for state:0x0, or valid-only:1
[ 139.488722] qup_i2c qup_i2c.0: Polling for state:0x3, or valid-only:0
[ 139.488753] qup_i2c qup_i2c.0: Qup config is :0x20f
[ 139.488783] qup_i2c qup_i2c.0: Qup state is :0x1f
[ 139.488783] qup_i2c qup_i2c.0: Qup mode is :0xc0a5
[ 139.488814] qup_i2c qup_i2c.0: WR:Wrote 0x2310132 to out_ff:0xd004e110
[ 139.488844] qup_i2c qup_i2c.0: RD:Wrote 0x4010133 to out_ff:0xd004e114
[ 139.488875] qup_i2c qup_i2c.0: Polling for state:0x0, or valid-only:1
[ 139.488905] qup_i2c qup_i2c.0: Polling for state:0x1, or valid-only:0
[ 139.488905] qup_i2c qup_i2c.0: idx:8, rem:1, num:2, mode:0
[ 139.488936] qup_i2c qup_i2c.0: Qup config is :0x20f
[ 139.488966] qup_i2c qup_i2c.0: Qup state is :0x1d
[ 139.488966] qup_i2c qup_i2c.0: Qup mode is :0xc0a5

[ 139.489302] qup_i2c qup_i2c.0: QUP intr= 187, i2c status=0x116300, qup status = 0x0
[ 139.489333] qup_i2c qup_i2c.0: Qup config is :0x20f
[ 139.489333] qup_i2c qup_i2c.0: Qup state is :0x1d
[ 139.489363] qup_i2c qup_i2c.0: Qup mode is :0xc0a5
[ 139.489424] qup_i2c qup_i2c.0: pos:1, len:1, cnt:0

[ 139.491774] qup_i2c qup_i2c.0: QUP_Power: Inactivity based power management
[ 139.491805] qup_i2c qup_i2c.0: Polling for state:0x0, or valid-only:1
[ 139.491835] qup_i2c qup_i2c.0: Polling for state:0x0, or valid-only:0

When the i2c bus fails:

[67853.065458] i2c i2c-0: ioctl, cmd=0x705, arg=0xbeaedba4
[67853.065519] i2c i2c-0: ioctl, cmd=0x703, arg=0x19
[67853.065549] i2c i2c-0: ioctl, cmd=0x720, arg=0xbeaedb80
[67853.065580] i2c i2c-0: master_xfer[0] W, addr=0x19, len=1
[67853.065610] i2c i2c-0: master_xfer[1] R, addr=0x19, len=1
[67853.065671] qup_i2c qup_i2c.0: Polling for state:0x0, or valid-only:0
[67853.065702] qup_i2c qup_i2c.0: Polling for state:0x10, or valid-only:0
[67853.065732] qup_i2c qup_i2c.0: Qup config is :0x20f
[67853.065763] qup_i2c qup_i2c.0: Qup state is :0x1c
[67853.065763] qup_i2c qup_i2c.0: Qup mode is :0xa5
[67853.065793] qup_i2c qup_i2c.0: Polling for state:0x0, or valid-only:1
[67853.065824] qup_i2c qup_i2c.0: Polling for state:0x1, or valid-only:0
[67853.065855] qup_i2c qup_i2c.0: Qup config is :0x20f
[67853.065855] qup_i2c qup_i2c.0: Qup state is :0x1d
[67853.065885] qup_i2c qup_i2c.0: Qup mode is :0xc0a5
[67853.065916] qup_i2c qup_i2c.0: Polling for state:0x0, or valid-only:1
[67853.065946] qup_i2c qup_i2c.0: Polling for state:0x3, or valid-only:0
[67853.065946] qup_i2c qup_i2c.0: Qup config is :0x20f
[67853.065977] qup_i2c qup_i2c.0: Qup state is :0x1f
[67853.066007] qup_i2c qup_i2c.0: Qup mode is :0xc0a5
[67853.066038] qup_i2c qup_i2c.0: WR:Wrote 0x2310132 to out_ff:0xd004e110
[67853.066038] qup_i2c qup_i2c.0: RD:Wrote 0x4010133 to out_ff:0xd004e114
[67853.066068] qup_i2c qup_i2c.0: Polling for state:0x0, or valid-only:1
[67853.066099] qup_i2c qup_i2c.0: Polling for state:0x1, or valid-only:0
[67853.066129] qup_i2c qup_i2c.0: idx:8, rem:1, num:2, mode:0
[67853.066129] qup_i2c qup_i2c.0: Qup config is :0x20f
[67853.066160] qup_i2c qup_i2c.0: Qup state is :0x1d
[67853.066190] qup_i2c qup_i2c.0: Qup mode is :0xc0a5

[67853.103211] qup_i2c qup_i2c.0: i2c_scl: 1, i2c_sda: 1
[67853.107454] qup_i2c qup_i2c.0: Bus still busy, status 132100
[67853.113802] qup_i2c qup_i2c.0: Transaction timed out, SL-AD = 0x19
[67853.119509] qup_i2c qup_i2c.0: I2C Status: 132100
[67853.124576] qup_i2c qup_i2c.0: QUP Status: 0
[67853.128421] qup_i2c qup_i2c.0: OP Flags: 10

[67853.133182] qup_i2c qup_i2c.0: QUP_Power: Inactivity based power management
[67853.133213] qup_i2c qup_i2c.0: Polling for state:0x0, or valid-only:1
[67853.133244] qup_i2c qup_i2c.0: Polling for state:0x0, or valid-only:0

@svaliente did you create a bug report somewhere?
How do you know sierra is aware of the problem?

Greetings.


#10

Hello,
In this document they talk about the same problem.
https://source.sierrawireless.com/resources/airprime/software/release_notes/wpx5xx-release-16,-d-,1-customer-release-notes/

Sin%20t%C3%ADtulo

I have send this problem to my distributor and I’m waiting…


#11

If I’ve news, I telly ou, of course!