i2c 驅動工作

在新版芯片(fpga)上寫驅動:

1. 新版芯片是否需要i2c slave?

   單片機很少有i2c slave 模塊的,我們的芯片上有,細問下來是爲了debug,可以讀cpu內部的寄存器來debug,但是最後這個module要不要拿掉再說。

注意:i2c的slave和master是兩個module,之前以爲是一個,然後設置一個狀態位,0是master, 1就是slave。

這個和公司的spi不一樣。爲什麼不一樣,我覺得spi本身的協議只是負責傳輸數據,是傳輸命令地址還是數據需要上層用戶自己實現。而I2c協議除了定義了傳輸時的timing,更上層如何讀或寫數據都定義了,所以i2c這個module比較大,實現了更多的協議,不像spi,設個狀態位master和slave就切換了。


不過像spi flash這種,應該是flash本身按照spi指定了一套協議,需要按照這個協議去訪問這個flash,這個就跟i2c從器件類似了。



2.所有的i2c peripheral 都是一樣的I2c協議,都是發id和address,然後就可以讀和寫這個地址的數據。所有的i2c從器件都可以這樣操作。



3.記住每個字節都有ack位(第九個脈衝),就算是16位的地址,也是分開發,第一個8個字節後就有一個ack位。


4寫的波形,start-->id-->adrress-->data-->stop

  read波形 start-->id-->adrress-->stop   start-->id-->data-->stop  要start兩次



5.burst write eeprom時,length太大會出錯?

sccb的burst write時就是頁寫,長度不能超過頁的大小,否則會出錯。其實就是長度大的話,比如一頁大小128個字節,寫的長度是512,那寫到129時,eeprom的地址不會自動加1,而是回到了這一頁的開始,所以,出錯就是把一開始的數據又給覆蓋了。


BTW:eeprom的頁寫和字節寫差不多,就是主器件不會在寫完第一個字節後發送停止位。



6 eeprom可以指定不同的頁嗎? 

 可以, 有頁地址


7.iic的restart mode

read 的時候有這種模式,正常是start-->id-->adrress-->stop   start-->id-->data-->stop  

restart模式少了第一個stop。

好處:快了一點點。



看材料:

ARM_2440_IIC總線接口_中文資料.pdf

    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章