【FPGA——协议篇】:I2C总线协议详解+verilog源码
?1.what is I2C bus?
? ?① 2條雙向串行線,一條數據線SDA,一條時鐘線SCL。
? ?② SDA傳輸數據是大端傳輸,每次傳輸8bit,即一字節。
? ?③ 支持多主控(multimastering),任何時間點只能有一個主控。
? ?④ 總線上每個設備都有自己的一個addr,共7個bit,廣播地址全0;系統中可能有多個同種芯片,為此addr分為固定部分和可編程部份,細節視芯片而定,看datasheet。
2.how to work?
2.1 I2C位傳輸
?? 數據傳輸:SCL為高電平時,SDA線若保持穩定,那么SDA上是在傳輸數據bit;
? ?若SDA發生跳變,則用來表示一個會話的開始或結束(后面講)
?? 數據改變:SCL為低電平時,SDA線才能改變傳輸的bit
?2.2 I2C開始和結束信號
? ?開始信號:SCL為高電平時,SDA由高電平向低電平跳變,開始傳送數據。
?? 結束信號:SCL為高電平時,SDA由低電平向高電平跳變,結束傳送數據。
???
2.3 I2C應答信號
?? Master每發送完8bit數據后等待Slave的ACK。
?? 即在第9個clock,若從IC發ACK,SDA會被拉低。
?? 若沒有ACK,SDA會被置高,這會引起Master發生RESTART或STOP流程,如下所示:
?2.4 I2C寫流程
寫寄存器的標準流程為:
1.??? Master發起START
2.??? Master發送I2C addr(7bit)和w操作0(1bit),等待ACK
3.??? Slave發送ACK
4.??? Master發送reg addr(8bit),等待ACK
5.??? Slave發送ACK
6.??? Master發送data(8bit),即要寫入寄存器中的數據,等待ACK
7.??? Slave發送ACK
8.??? 第6步和第7步可以重復多次,即順序寫多個寄存器
9.??? Master發起STOP
寫一個寄存器
?寫多個寄存器
?
?2.5 I2C讀流程
讀寄存器的標準流程為:
1.??? Master發送I2C addr(7bit)和w操作1(1bit),等待ACK
2.??? Slave發送ACK
3.??? Master發送reg addr(8bit),等待ACK
4.??? Slave發送ACK
5.??? Master發起START
6.??? Master發送I2C addr(7bit)和r操作1(1bit),等待ACK
7.??? Slave發送ACK
8.??? Slave發送data(8bit),即寄存器里的值
9.??? Master發送ACK
10.??? 第8步和第9步可以重復多次,即順序讀多個寄存器
讀一個寄存器
?讀多個寄存器
3.advantage
簡單、便宜、可靠性高
4.i2c master code(verilog)
鏈接:https://pan.baidu.com/s/1bIds90w9Ti1qXry5E5gSKQ
密碼:8vqf
參考博文:http://dpinglee.blog.163.com/blog/static/14409775320112239374615/
總結
以上是生活随笔為你收集整理的【FPGA——协议篇】:I2C总线协议详解+verilog源码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机语言学 考研学校,2019考研专业
- 下一篇: 计算机组装维修中级试题,计算机维修工中级