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