I2C behaviour

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Anonymous
Not applicable

I have an RTC connected via I2C and every time I have the RTC running I seem to have problems sending messages. both the module and device acknowledge they have a connection but the module will continuously try and fail to send a message until the connection is dropped. This only happens when the I'm using the RTC. I'd like to find a solution that doesn't require me using a different  interface if possible

Thank you 

0 Likes
6 Replies
Anonymous
Not applicable

Sean,

Are you using the 20736 or 20736S?

JT

0 Likes
Anonymous
Not applicable

The 20736S

0 Likes
Anonymous
Not applicable

Probably going to need more details to get a handle on what the problem could be.

For example what is the connection interval, slave latency, supervisor timeout you are using..

What is the data rate of the I2C device and how often and how much data are you reading from it.?

Is it interrupt driven or do you poll the device periodically?

Is your application driven off the fine timer and if so what is the timer interval.

If your application thread is long running it could interfere with the connection.

Make sure your device is not going to sleep while reading the i2C or processing application thread.

Do this by registering the low power callback and return 'no sleep' whenever your application thread is active.

These are just ideas of things to try.  I don't know if any of them are the answer to your problem.

0 Likes
Anonymous
Not applicable

I'm working with the hello sensor application so I didn't change a whole lot but the slave latency is set to 0, here are my connection parameters

bleprofile_SendConnParamUpdateReq(/*minInterval*/80, /*maxInterval*/400, /*slaveLatency*/0,/*timeout*. 700);

it works at the default 400 khz,

I read from the RTC when a construct my payload before writing to the characteristic, I've only tried reading from then RTC when I boot in case using the I2C interface just before transmission was casuing the issue but I get the same result, The module attempts to send a message and prints out "permission check retCode = 00"


the application is driven off the seconds timer and the fine timer is set to 1 second as well. 

0 Likes
Anonymous
Not applicable

Hi Sean,

Could you send us your I2C traces?

-Lucy

0 Likes
Anonymous
Not applicable

Can you be more specific about what you mean when you say "when I'm using the RTC"?

e.g. what would it look like when you are NOT using the RTC:

   1.  The RTC hardware is physically removed from the circuit

   2. The RTC Is in the circuit but the power is not supplied to it.

   3. The RTC is powered on but you have not initialized the I2C interface

   4. The RTC is powered and initialized but you have not accessed the I2C interface from the App (read/write).

   5. ??

I'm wondering if there might be some hardware issue that is biting you such as a voltage droop on the BLE module when the RTC is powered on.  Are you running on laptop (USB) power or battery power?  Is there a voltage regulator in the circuit?  I'm guessing that you are using the TAG board, or do you have a custom circuit board?

I'm not familiar with the Hello Sensor App.  I mostly use the Heart Rate Monitor App.  I wonder if you could use either one, or is there something special about the hello sensor app that drew you to choose it?  Perhaps a service or characteristic you want to use.

I don't know if you have an iPhone in the mix, but iPhone will not accept a 7 second supervision timeout.  How often do you need to send the RTC data to the client?  10 per second? or 1 per second?  Like Lucy said, a trace output might help.

0 Likes