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 >