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

Reply via email to