Reply
Posts: 5
Registered: ‎04-19-2017

Si5351 I2C Programing

I failed everytime programing Si5351 via I2C because it sends no acknowledge back when I send register address or data.Sometimes I can write one register successfully,sometimes I can write three registers successfully.The wave of SDA and SCL is here.-50029d81393e58c2.jpg

Posts: 5
Registered: ‎04-19-2017

Re: Si5351 I2C Programing

solved
Posts: 6
Registered: ‎10-13-2016

Re: Si5351 I2C Programing

That's great!

Is the data width a problem?

Thanks!

Segar.

Posts: 472
Registered: ‎01-18-2004

Re: Si5351 I2C Programing


DaweiTian wrote:
solved

Tell us how you solved the problem.

Posts: 3
Registered: ‎09-11-2017

Re: Si5351 I2C Programing

Hi DaweiTian,

 

Could you explain how you solved this issue. I have a similar issue with the Si5351A MSOP IC. I assume that the default slave address is 0xC0,  with this I am constantly getting a "no acknowledge" high bit on the 9th clock while trying to write/read. I have tried 3 Samples and all are giving the similar responses? It would be of great help if you could give some insights into your solution. Thanking you.

Posts: 5
Registered: ‎04-19-2017

Re: Si5351 I2C Programing

I didn't use hardware I2C.When sending bits to Si5351,I set SDA high instead of high-impedance as "1"(only SDA).I corrected this and solved the problem. I guess it didn't work because SDA rises too fast.Try adjusting the pull-up resistor.Hope that can help you.
Posts: 3
Registered: ‎09-11-2017

Re: Si5351 I2C Programing

Thank you for the quick reply.

I am using hardware I2C(pullp-up terminations). I did adjust the pull-ups(between 500Ohms upto 10K), but it somehow dint help much. The communication works only on an average 2 out of 10 times. However, with the same code I could read/write an EEPROM connected to the same I2C bus without any issues. The bus lines go almost rail to rail and I dont see any glitches on the Oscilloscope.

 

<a href="http://community.silabs.com/t5/Welcome-and-Announcements/Community-Ranking-System-and-Recognition-Program/m-p/140490#U140490"><font color="#000000"><font size="2">Hero</font></font> </a> jmg
Posts: 1,185
Registered: ‎04-27-2004

Re: Si5351 I2C Programing

[ Edited ]

ViJi wrote:

Thank you for the quick reply.

I am using hardware I2C(pullp-up terminations). I did adjust the pull-ups(between 500Ohms upto 10K), but it somehow dint help much. The communication works only on an average 2 out of 10 times. However, with the same code I could read/write an EEPROM connected to the same I2C bus without any issues. The bus lines go almost rail to rail and I dont see any glitches on the Oscilloscope.

 


See also 

https://github.com/NT7S/Si5351

however, if you do work sometimes, that suggests other issues.

 

After a power up, does the Device ID always work ? (ie no clock out - assumes your part is default)

What i2c speed do you use ?

Pick one simple register, and check you can always R/W that, before any output is enabled.

 

We did find on a test lash-up, that i2c went flakey on high output clock speeds - IIRC > 70MHz made i2c unreliable, not too surprising when you think those high speed clocks will end up 'on everything'.

 

Posts: 472
Registered: ‎01-18-2004

Re: Si5351 I2C Programing


ViJi wrote:

Thank you for the quick reply.

I am using hardware I2C(pullp-up terminations). I did adjust the pull-ups(between 500Ohms upto 10K), but it somehow dint help much.


There is an actual specification for the value of the I2C pullup resistors. You can't just change it arbitrarily to meet your fancy. 


The communication works only on an average 2 out of 10 times. However, with the same code I could read/write an EEPROM connected to the same I2C bus without any issues. The bus lines go almost rail to rail and I dont see any glitches on the Oscilloscope.

 


Getting no acknowledge means that perhaps you have the slave address set incorrectly -- a common mistake is to forget that the R/W bit is the LSb of the address, so for example a slave address of 0x24 should sent as 0x48 for writes and 0x49 as reads.

Posts: 3
Registered: ‎09-11-2017

Re: Si5351 I2C Programing


Andy_Peters wrote:

ViJi wrote:

Thank you for the quick reply.

I am using hardware I2C(pullp-up terminations). I did adjust the pull-ups(between 500Ohms upto 10K), but it somehow dint help much.


There is an actual specification for the value of the I2C pullup resistors. You can't just change it arbitrarily to meet your fancy. 

 

==>  I do understand that I can't totally fancy the resistor values. But I changed it with respect to an estimated bus load, rise time requirement and sink current. I suspected that the Si5351 could not pull down the SDA line low enough.


The communication works only on an average 2 out of 10 times. However, with the same code I could read/write an EEPROM connected to the same I2C bus without any issues. The bus lines go almost rail to rail and I dont see any glitches on the Oscilloscope.

 


Getting no acknowledge means that perhaps you have the slave address set incorrectly -- a common mistake is to forget that the R/W bit is the LSb of the address, so for example a slave address of 0x24 should sent as 0x48 for writes and 0x49 as reads.


==> Thank you very much for the Github link. I did try with the suggested 0xDE address, but this wasn't true for my case. I think I have a correct part expecting 0xC0. Furthermore No-ACK happens randomly either for control Byte, Address Byte or Data Byte. It seems like the signal integrity on the bus is enough for the EEPROM communication, but at the limits for Si5351A. However I haven't been able to find the culprit on the oscilloscope.

 

As further Info, I am using the Channel B of a FTDI 2232H mini module for I2C communication. It does not have an open-drain pin configuration and therefore I have to change SDA pin to input while reading the acknowledge bit. This could also be a cultprit due to the random No-ACK. However as said the EERPOM works prefectly.

 

Today I got an Adafruit Si5351A breakout board to test. Still same issue. Will further debug PCB routing and the code.

 

Thanks once again for the feedbacks.

Posts: 472
Registered: ‎01-18-2004

Re: Si5351 I2C Programing


ViJi wrote:

Andy_Peters wrote:
There is an actual specification for the value of the I2C pullup resistors. You can't just change it arbitrarily to meet your fancy.

==>  I do understand that I can't totally fancy the resistor values. But I changed it with respect to an estimated bus load, rise time requirement and sink current. I suspected that the Si5351 could not pull down the SDA line low enough.


I tested the Si5351 and I used 2.2k pullups and the part certainly could pull down to ground. I used an EFM8BB3's I2C port as a bus master to drive it. it works.


==> Thank you very much for the Github link.


What Github link?


I did try with the suggested 0xDE address, but this wasn't true for my case. I think I have a correct part expecting 0xC0.


Yes, the MSOP has no A0 address-set pin, so the I2C slave address is 0xC0. That is made clear in the datasheet.


Furthermore No-ACK happens randomly either for control Byte, Address Byte or Data Byte. It seems like the signal integrity on the bus is enough for the EEPROM communication, but at the limits for Si5351A. However I haven't been able to find the culprit on the oscilloscope. 

We haven't seen your hardware, so we can't guess, but my Si5351 test jig had fly leads from the EFM8 starter kit board to the 5351 board (MSOP-to-DIP adapter board). What does your 5351 board look like?


As further Info, I am using the Channel B of a FTDI 2232H mini module for I2C communication. It does not have an open-drain pin configuration and therefore I have to change SDA pin to input while reading the acknowledge bit. This could also be a cultprit due to the random No-ACK.


When you do that, are you sure you are changing the configuration of the SDA pin on that master to input before you drive the rising edge of SCL? Remember, with I2C you are not allowed to change SDA while SCL is high (actually a setup time before it goes high and a hold time after it goes low).


However as said the EERPOM works prefectly.

Today I got an Adafruit Si5351A breakout board to test. Still same issue. Will further debug PCB routing and the code.


Are you sure you connect power (+3.3 V) and ground between the master board and the Si5351 board?

Posts: 6
Registered: ‎10-13-2016

Re: Si5351 I2C Programing

HI , Have you close this issue, if not, can you help get scope shots? 1. scope shots showing set up and hold times for SDA vs the falling edge of SCLK ? 2. scope shots showing set up and hold times for SDA vs the rising edge of SCLK ? Let see if the timing margin is enough?