i2c is simple. It looks just complicated the first time you using it. I think it is best that you go to wikipedia looking for: i2c smbus bit-banging
So I don't need to write it repeately here. Yes, the base address depends on write or read. The lowest bit is different. In most i2c devices you can let auto-increment the internal address pointer. One particular different thing with smbus is that there is a time-out defined of 10ms. Care about what is the VCC for the bus. 10K is a good value. - Henry drmail377 schrieb: > 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 [email protected], "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 >> > > > > ------------------------------------ > > Yahoo! Groups Links > > > > -- www.ehydra.dyndns.info
