一、理论上了解I2C时序
I2C写数据时序如图:
通过解析器解析I2C通信如上图(SCL和SDA反了)。
1---起始信号 2、3---应答信号ACK 5---停止信号
起始信号:SCL线是高电平时,SDA线从高电平向低电平切换。
停止信号SCL线是高电平时,SDA线从低电平向高电平切换。
I2C通信的过程:
起始--->写NFC芯片的地址(NFC芯片确认地址给MCU响应)--->MUC发送想要写入的寄存器地址(NFC芯片收到给响应)--->给地址写入数据(写入完成给响应)--->结束
注意:写NFC芯片的地址,一般NFC芯片为七位,比如:1010111,第八位是读写操作位。
1代表读;0代表写。
例如:0xA0是想对应芯片地址写数据。
遇到的问题:
写NFC地址的时候,没有收到对应响应。
查找数据手册后发现,有的芯片需要把CSN引脚拉低,拉低后解决问题。
二、实战
有一款NFC芯片FM11NT081D,它是通过I2C写入或读取里面数据的。
1、细看数据手册
粗略浏览数据手册目录,找到重点细看。
如:I2C工作流程、主机向从机写入数据流程及读取数据流程,还有写入数据用户区等。
2、测试读写数据
2、1写数据
看数据手册分析:
芯片地址是1010111,七位地址
流程应该是:
start--->写NFC芯片的地址(最后一位是0,写数据)--->MUC发送想要写入的寄存器地址1--->MUC发送想要写入的寄存器地址2(注意高字节在前,低字节在后) --->写入数据--->stop
对应写入代码测试效果。
从下图看到数据写入成功。
遇到的问题:
我在写完两个寄存器地址后,告诉芯片现在开始写数据(这一步多余的,因为人家数据手册上告诉你:写入两个寄存器地址就可以写数据了!),加入了这个代码,时序上有回应,但是芯片读数据是没有写入信息。
2、2读数据
读数据就比较有意思了。
数据手册这样写:流程应该是:
start--->写NFC芯片的地址(最后一位是1,读数据)--->MUC发送想要写入的寄存器地址1 --->读数据--->stop
但是按照这个流程测试,读不到数据。
查看数据手册,字节数超过256,经询问要写入寄存器地址两个,在读取。
文章来源地址https://www.toymoban.com/news/detail-417200.html
然后,修改了一下读数据流程:
start--->写NFC芯片的地址(最后一位是0,写数据)--->MUC发送想要写入的寄存器地址1--->MUC发送想要写入的寄存器地址2(注意高字节在前,低字节在后) --->告诉芯片开始读数据 --->读数据--->stop
以上流程可以读到数据。虽然不太懂,MCU终于可以读到数据了(开心~)。
文章来源:https://www.toymoban.com/news/detail-417200.html
到了这里,关于I2C通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!