210的IIC应用例程的修改

早在单片机课上接触过I2C,不过当时只是大概了解然后直接把课本上的代码敲上了事。课上学习的是AT24c02的驱动。I2C总线作为单片机嵌入式中常见的名词并不是徒有虚名,常见的EEROM,lcd液晶,以及运动传感器都是通过I2C与MCU通信。而我这次需要驱动的是一个三轴加速度传感器(LIS331DL)认真阅读完了I2C总线协议后开始上手代码,难度还是很大。

首先查阅LIS331传感器所给的例程,该例程实验环境为210实验主板,烧写进程序后并输出没有按理想结果;

该例程代码如下:

习惯性的驱动硬件不去看芯片手册,而是直接看例程,更直接明了。但这。。。

检查后并无错误,只能是该例程的问题,只能打开芯片手册查看该传感器操作步骤。

首先是I2C总线的设备地址问题,芯片手册有明了的说明如下:

此前接触过I2C总线知道,在IIC上设备地址共八位,不同种类设备的IIC设备地址的地址的前四位不同,中间三位一般作为用户自主选择设备的引脚靠高低电平控制,最后一位是R/W读写控制位,也就是同一个设备有读写两个设备地址。

而文档说1-6位是不可更改为,因此只剩下SAD[0]是用户可定义的,又芯片表明并无多余的引脚,于是产看传感器硬件图:

SDA[0]被直接焊丝在高电平,于是有了此设备设备地址前七位为0011101,即读地址0x3b,写地址0x3a。

返回程序将芯片地址改为0x1d,在linux环境驱动下,IIC总线的设备驱动ioctl只需要改地址的前七位。

继续查看芯片手册找到关键所在,

这里定义了该传感器的所有内部寄存器功能。其中比较重要的是

下面是该寄存器各个位定义:

由上表的地址为0X20的寄存器应写入0xe7才能正常工作,而并不是历程中的0x27.

接下来就可以读取三轴的原始数值了,他们是分别存储在0x29,0x2a,0x2d的字节数值。

而不知例程中的连续两字节的16位数。

程序修改完毕,并得出三轴数据。

综上,例程使用需谨慎。

猜你喜欢

转载自blog.csdn.net/qq_41281601/article/details/81670022
IIC
今日推荐