关于MLX90614红外测温模块SMBus 协议的学习笔记<一>(附MLX90614中文资料,英文资料)
写在前面:因为在某宝的某深圳育松电子里面买的模块介绍里面写支持I2C协议,点开来他给我的文件却认真的写着支持SMBus协议,淘宝小妹说没有技术支持,只好靠自己了,大二开学时候因为运动会训练太累,单片机的课几乎都是睡觉睡过去的,sigh,作为小白,认真的查了百度才发现两者协议是有区别的。在此写下博客.
由于51单片机本身并没有SMBus接口,并且就一个串行口,所以需要用到I/O口去模拟SMBus串行通信,所以电路图上的四个接口分别接在单片机的这个位置,是这样的 ↓
SDA-我用了P1^6口
SCL-P1^7
Vdd-电源正
GND-连我都知道啦,接地
接好了电路之后就是各种C51代码了。
写代码之前要对照着模块的时序图进行写。楼主说了,作为一个24K纯小白,当然是,不懂怎么看时序图啦,然后就各种搜别人博客带着“教你如何看时序图”的标题的文章,然并卵,但是,我自己对着网上找来的范例代码,看懂了大部分。
先放出他的协议内容
协议的简单描述:
----------------------------------------------------------------------------------------------------------------------------------------------------
当 MD 初始化通信,将首先发送受控地址,只有能识别
该地址的 SD 会确认,其它的会保持沉默。如果 SD 未确认其中的任意字节,MD 应停止通信并重新发送信息。
NACK 也会在 PEC 接收后出现,这意味着在接收的信息有错误并且 MD 应重新发送信息。PEC 的计算结果是基
于 除 START,REPEATED START,STOP,ACK, 和 NACK 位 外 的 所 有 位 。 PEC 是 CRC-8 的 多 项 式 a
X8+X2+X1+1。每个字节的最高有效位首先传送。
----------------------------------------------------------------------------------------------------------------------------------------------------
由于模块生产出来的封装,SMBus里面的功能我们只用到,读取数据和写入数据两个。
接下来放出来这个,写代码时候最需要对着看的三张图:
如图所示,读取数据的步骤
如图所示,写入数据的步骤
SA:从设备地址slave addr
command:存放了某种命令的地址(不同地址指向不同命令)
LSByte:字节最低有效位,也就是16位数据的低八位
MSByte:16位数据的高八位
PEC:错误代码包
我理解的通信顺序就是:
写数据:
开始,发一个位出去---发一字节的从设备地址(一般就7位,具体在后面会介绍,一般都是固定的)---SCL为高时,SDA由高到低
|
发送从设备7位地址给从设备,这个时候从设备(SD)会比对地址对不对,对,发应答位(ack)给MD(主设备),若不对,无应答,
重新开始通信
|
发送命令地址,MD接收ACK
|
MD发出数据低八位,MD接收ACK
|
MD发出数据高八位,MD接收ACK
|
MD发出PEC,MD接收ACK
|
愉快的结束了
让我们来看看。MLX90614各种命令的地址吧哈哈哈。
一般来说,发送地址,就使用E2PROM,若是发送数据,测试选取RAM里面的