1) 该芯片的测量范围
+-2g (默认)
+-4g
+-8g
2)该芯片有几种工作模式
OFF
STANDBY(待机)
ACTIVE
3)该芯片的从设备地址
0x1d
4)该芯片大概有多少个特殊功能寄存器
大约有50个寄存器
5)ID值存储在哪个寄存器中
WHO_AM_I (0x0d)
6)加速度值存在哪些寄存器中
0x01~0x06的寄存器中
该驱动本质上也是去操作mma8653内部的特殊功能寄存器
实现该驱动的基础:I2C控制器的驱动
iic_init
iic_start iic_tx iic_stop: 发
iic_start iic_rx iic_stop:收
读mma8653的datasheet
从设备地址:0x1d
内部有接近50个特殊功能寄存器
读写其内部寄存器的方式
写的过程:mma8653_write
主设备 发start
发0x1d<<1|0
收ACK
发寄存器地址
收ACK
发data
收ACK
...
发data
收ACK
发stop
读的过程:mma8653_read
主设备 发start
发0x1d<<1|0
收ACK
发寄存器地址
收ACK
重发start
发0x1d<<1|1
收ACK
收data
发ACK
...
收data
不发ACK
发STOP
读取加速度值
mma8653 datasheet
1)加速度值存在于哪个寄存器中
0x01~0x06寄存器
0x01和0x02寄存器前2bit共10bit存放X轴加速度值
0x03和0x04寄存器前2bit共10bit存放Y轴加速度值
0x05和0x06寄存器前2bit共10bit存放Z轴加速度值
2)地址为0x00的寄存器的作用
数据状态寄存器,可以检测XYZ轴寄存器中数据状态,相应位表示是否被覆盖以及是否产生新数据
3)如何切换为active
CTRL_REG1
[0] 1 ,切换为ACTIVE模式
问题:我是如何读取到加速度值的
以X轴数据为例:
X = arr[01]<<24 | arr[02]<<16
X = X>>22
错误实例:
X = arr[01]<<8 | arr[02]
X = X>>6