The Si570 I2C device address is 7 bits (correct Henry). I'm new to
I2C. After studying further Figure-3 in the Si570's data sheet
(V0.31), the last bit of the device address byte is the I2C read/write
bit, seemingly only used during reads(?)

It seems that to read: A bus START is sent by the master, then the
Si570's 7 bit device address are sent (bits are always sent MSB
first), addr 55h in the addr byte seven MSB's, left-justified with the
read/write LSB bit clear (0=WRITE, complete byte=AAh?), the Si570 then
responds with an ACK. Then the 8 bit register address is sent, the
Si570 again responds with an ACK. Then another bus START is sent
followed by the 7 bit device address (again 55h) with the LSB set to
1=READ (complete byte=ABh?), the Si570 again responds with an ACK.
Then the master sends the register data byte with no preceeding START,
the Si570 again responds with an ACK. At this point, for a single byte
read, it seems the master then finishes by sending a STOP.

A combined message for multiple byte reads or writes after accessing
the Si570 seems possible. Quoting from the Si570 data sheet Figure-3,
"Address auto incremented after each data read or write". The message
diagrams in Figure-3 reflect this. Combined message writes may help
slow masters meet the 10ms unfreeze DCO to NewFreq write timing
requirement imposed by the Si570. I don't think this is going to be a
problem with the Propeller, even in the relatively slow Spin
interpreted language. I need to get my head around this combined
message issue with the I2C driver I'm using with Propeller
(Basic_I2C_Driver.spin by Mike Green, freely available on the
Propeller Object Exchange, www.parallax.com). Let's stay away from
Propeller-specific stuff in this thread IMO.

To write: Things get simpler. You don't have to send the device
address twice and toggle the LSB write/read bit. Again, refer to the
Si570 data sheet Figure-3.

So...

It seems the device address, 55h vs. AAh vs. ABh is sorted-out.

As for the register addresses: Why I'm seeing Reg07 appear at 600h in
my propeller bus scan is still a mystery. I need to work this out.

I've glanced briefly at the Si570 reference code in C (SiLabs AN334,
which seems to use SMBus, a subset(?) of I2C, and W0CNN's C-source
Rev.A for the AVR (available from the softrock40 "Files > Si570 Atmel
AVR Folder" which seems largely lifted from SiLabs' AN334 code). Both
seem to address the Si570's registers by their register numbers
indicated in the Si570 data sheet, e.g., register 137d (decimal)
addressed as 137d. Common practice is for a part manufacturer to
assign register address vs. register numbers as either equal or
register number minus one (starting from zero for the address). The
fact that I can read register 07 at address 600h implies the latter.
Nowhere in the Si570 data sheet is this clarified as far as I'm concerned.

I need to dig further into the example C-sources mentioned above to
see how this dual addressing is handled for reads (LSB read/write
toggle). But do keep in-mind, I'm able to successfully read/write to
the 24LC256 I2C EEPROM at base byte addresses witih no problem with
the propeller I2C driver. Somethings different with (at least) the
Si570 on the same bus. I'm using two 10k pull-ups on the SDA/SCL
lines. These values may be debatable, but I want to keep them
compatible with the Propeller Protoboard's on-board 24LC512 EEPROM, so
that eventually the Si570 will be on the same bus with the native
EEPROM part (I'm not using a Protoboard at the moment, a home-brew
propeller board with a separate I2C bus on pins separate from the main
EEPROM).

In the mean-time, I tried to brute-force write a new frequency from
the Propeller, as writes are seemingly simpler than reads. I used
register values from K9IVB's spreadsheets updated with my actual
start-up defaults read from the Si570. Tried to change the default
output from 56.32 MHz (roughly confirmed with a scope, but not to
great resolution yet, I have test eqpt to do so up to 12 digits GPS
referenced) to 40 MHz. The writes to the direct register addresses
seem to change the frequency to 50 MHz. Hmmm... I have to look at the
frequency calculation formulas to see how accurate I have to measure
the actual default output and how this will affect the register values
rom the K9IVB spreadsheets.

Someone correct me if I'm wrong with anything interpreted here about
writing/reading the Si570. Yes, I've downloaded the NXP I2C
specification - gotta RTFM; I-know. So much for hopes of a quick-start
with the propeller though.

Best 73's David


--- In softrock40@yahoogroups.com, "drmail377" <[EMAIL PROTECTED]> wrote:
>
> I just got my first Si570. I'm trying to marry it with the Parallax
> Propeller chip. Are the register addresses the same as the register
> values, or values minus one as is commonly the case? My results say no
> (read below). I can't find any explicit information on register
> addresses in the Si570 data sheet.
> 
> So I scanned my I2C bus with the propeller. The Si570 was discovered
> at device address AAh. The default register no. 7-12 values look
> correct and play well with the K9IVB spreadsheet downloaded from the
> Files area. I can write/read perfectly to/from a 24LC256 I3C EEPROM on
> the same bus at address A2h. So I think the I2C drivers are ok. The
> Si570 is CMOS, P/N Si570CAC000141DG.
> 
> Here are the Si570 register values and addresses where I found them:
> 
> Defaults register values read from my Si570:
> 56.32 MHz
> R07, E1h
> R08, C2h
> R09, 86h
> R10, 16h
> R11, A9h
> R12, 9Dh
> 
> I can read register values at these addresses:
> R07, 600h-6FFh
> R08, 700h-7FFh
> R09, 800h-8FFh
> R10, 900h-9FFh
> R11, A00h-AFFh
> R12, B00h-BFFh
> 
> Register values seem to change every 256 bits of address change!
> 
> Is this correct? What register addresses do I write to? What are the
> read and write addresses for registers 135 and 137?
> 
> Any help is most appreciated...
> 
> Best 73's, David
>


Reply via email to