在新版芯片(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