“移植”的重要性:並非所有的電路都得自己設計,到了一定階段,“移植”也是一種學習能力。——CrazyBingo
轉眼間期末又到了,最近開始了所謂的期末總預習,比賽最終還是把作品交了,也算是對自己這學期一個交代了吧,感覺不總結出來總是少點什么,所以還是在努力一把,熬夜把之前的東西整理出來吧。Bingo說的“移植”是一種能力,但是完全拿別人的代碼拿來用不加以思考和學習,那樣是沒有意義的,這學期就是因為“移植”的太多了,才感覺學到的很零散不系統。學習的過程本來就是一個非常枯燥的過程,不能總想着得到。之前看了許多文章,在尋找FPGA的前途是什么,到頭來還是沒一探出個究竟,還不如堅持內心,做自己想做的,學自己想學的,學知識的方法是相通的,想太多只能說是有點浮躁,寫博客可以說不失為一個讓人靜心的好方式,即使沒營養有怎樣,我的博客我喜歡你能把我怎樣。
IIC協議:
主機:初始化總線的數據傳輸並個允許傳輸的時鍾信號器件。
從機:任何被尋址的器件都被認為是從機
SCL時鍾線SDA 數據線
起始位:SCL為高電平,SDA下降沿
結束位:SCL高電平,SDA為上升沿
總結:當scl為高電平的時候,sda為出現下降沿為start位,當生成了為低電平的時候,sda出現上升沿為stop位,所以在scl為高電平的時候sda應該保持穩定不能隨意亂動。
寫入數據狀態
scl為高電平的時候sda的數據被寫入從機,
scl為低電平的時候sda的數據被寫入主機
讀取數據狀態
scl為低電平的時候器件的數據被讀出到sda總線上,在scl高電平器件保持數據穩定
scl為高電平的時候主機將sda總線上的數據讀出被存儲,在scl低電平時間保持穩定
SCL 周期400k 2.5us,SCL最大可以為400Khz,但是一般設置為100Khz
IIC寫時序
ACK (Acknowledgement),即確認字符,在數據通信中,接收站發給發送站的一種傳輸類控制字符。表示發來的數據已確認接收無誤。即應答。低電平。
“接收器每接受一個正確的數據字節后,都要在數據線上發送一個應答信號。低電平為確認,高電平為不確認”
MSB是Most Significant Bit的縮寫,最高有效位。在二進制數中,MSB是最高加權位。與十進制數字中最左邊的一位類似。通常,MSB位於二進制數的最左側,LSB位於二進制數的最右側
LSB,英文 least significant bit,中文義最低有效位。
圖中MSB即表示從最高位開始傳輸,ACK即表示寫入數據完成后的應答
1)產生 start 信號
2)傳送器件地址(寫 DEVICE ADDRESS)
3)傳送字地址 WORD ADDRESS(ACK 不用管)
4)發送想要寫入的 8 位數據(ACK 不用管)
5)產生 stop 信號(ACK 不用管)
IIC讀時序
write虛寫,一次空寫入。在這里實際上是要讀取數據,不是寫數據,但是還是要寫入需要讀取得器件地址,卻沒有寫入數據,向設備寫要讀的數據的地址 不是真正向地址寫數據 這個地址會被鎖存,不會觸發讀寫操作 所以dummy write。
1)產生 start 信號
2)傳送器件地址(寫 DEVICE ADDRESS)
3)傳送字地址 WORD ADDRESS
4)發送 start 信號
5)再一次傳送器件地址(讀 DEVICE ADDRESS)
6)讀出
8)位數據
7)產生 stop 信號
SCCB(I2C)時序圖
IIC協議從機對主機響應
每當一個字節的數據或命令傳輸完成時,都會有一位的應答位,需要應倒時,數據發出方將SDA總線設置為3態輸入,由於IIC總線上有上拉電阻,因此此時總線默認高電平,若數據接收方正確接收到數據,則數據接收方將SDA總線拉低,以示正確應答。
IIC傳輸的應答位是數據接收方給數據發送方!
SCCB總線在寫寄存器時,先寫設備地址(0x42),收到從設備應答后再寫寄存器地址,最后寫將要寫入的寄存器的值。
SCCB總線的讀取寄存器時序:SCCB總線在讀寄存器時,分兩個階段:第一階段為先寫設備地址(0x42),然后再寫寄存器地址;第二階段為寫設備地址(0x43),然后讀出寄存器地址的值,從而完成對一個寄存器值的讀取。
這是I2C協議的兩條總線,時鍾總線sclk和數據總線sdat,我們在時鍾總線為高電平的中心時采集數據,在時鍾總線為低電平的中心改變數據,每發送8位數據會有一個應答。
應答在仿真時序圖上看是為高阻態z的,這一點很重要,當時我就是在這上面迷惑了好久。
最后在說一句Modelsim真是太好用了,用腳本仿真的話會大大加快仿真的速度的看來還是要有很多東西要學的。眼看期末了,趕緊把考試早早通過,就可以做我自己想做的事情了。
轉載請注明出處:NingHeChuan(寧河川)
個人微信訂閱號:NingHeChuan
如果你想及時收到個人撰寫的博文推送,可以掃描左邊二維碼(或者長按識別二維碼)關注個人微信訂閱號
知乎ID:NingHeChuan
微博ID:NingHeChuan