Si5351 Clock Generator I2C


In two previous posts I looked at programming the Si5351A clock generator with the Arduino (Ref.1/2). In this post I examine the I2C bus used for communication between the Arduino and Si5351A module. Using a digital scope, the bus can be decoded to compare the program instructions with what was actually sent for trouble shooting.

I2C Basics

Fig.1 I2C Start & Stop Data & Clock Waveforms
Fig.2 I2C Stop/Start & Clock Rate=100KHz

The I2C bus originally was nominally 3.3VDC, but due to the variety of logic levels, the latest specification is 30%VDD & 70%VDD (Ref.3). The Adafruit Si5351A module has 3.3VDC/5VDC level shifting circuitry with 10K pull-up resistors, so the Arduino 5VDC SDA/SCL leads can be directly connected with no external pull-ups.

Figure 1 shows the I2C Start and Stop waveforms. For a Start, the SDA goes from high to low while the SCL is high. For a Stop, the SDA goes from low to high while the SCL is high. The SDA/SCL leads are high when no transmission is taking place. Figure 2 shows the first packet of the Arduino (Master) to Si5351A (Slave) data frame. The SDA lead goes low while the SCL is high indicating a Start. The first 7bits are the Slave Address=$60. The 8th bit indicates R/W (1/0) or 0 in this case for a write. On the 9th clock pluse, the Slave Si5351A pulls down the SDA to 0 indicating an ACK.

I2C Data Transfer

Fig.3 I2C Data Transfer on Bus
Fig.4 I2C Write Si5351A
Fig.4 I2C Data Frame

Figure 3 shows the general format for I2C data transmission. After the SDA Start pulse, there are 9 SCL clock pulses. The Master data MSB is sent first. After the 8th clock pulse, the 9th clock pulse is when the Slave pulls the SDA low to indicate an ACK that the data byte has been received correctly. Figure 4 indicates how a data byte is sent to the Si5351A_addr=$60 (Ref.4). The data can be sent as a single byte or in burst mode. As a single byte, we have the Slave addr $60, Register Value, then the Data. The Slave address is 7bits, with the 8th bit for Read/Write (1/0).

Figure 4 shows three packets. The first packet is the initial Slave Addr=$60. The second packet consists of the Slave Addr=$60, Register Value=$03 and Register Data=$FF. The third packet consists of Slave Addr=$60, Register Value=$10 and Register Value=$80.

Fig.5 YouTube Video Si5351 Clock Generator I2C

Please send your comments, questions and suggestions to:

YouTube Channel
YouTube Channel


#1. – “Si5351 Clock Generator Programming+”

#2. – “Si5351 Clock Generator Programming”

#3. – “UM10204 I2C Bus Specification”, NXP

#4. – “Si5351A Data Sheet”

By Jeremy Clark

Jeremy Clark is a Senior Telecommunications Engineer and Advanced Amateur Radio Operator VE3PKC. He is the author of E-Books on Telecommunications, Navigation & Electronics.