nrf52832用I2C和SPI两种方式驱动LIS2DS12

本来在这里写了些牢骚话,但是想想这是记录技术文档,还是废话少说为好

直奔主题

先介绍下LIS2DS12,ST公司出的gsensor,内部自带mcu ,可以输出步数、敲击、翻腕等行为结果,还提供了一个256级的FIFO(可以存储256组三轴数据),FIFO具有多种模式,具体参照datasheet设置

LIS2DS12的具体驱动方法不细致描述了,这里只记个大概,提个醒。

芯片支持两种通信方式:I2C 和 SPI 。其中SPI又分为三线SPI 和四线SPI

用CS引脚来决定使用哪种方式:
CS接高电平,则使用I2C
CS接低电平,则使用SPI
nrf52832用I2C和SPI两种方式驱动LIS2DS12_第1张图片

注意使用SPI 时,不要把CS的电平给固定住,CS引脚由SPI驱动控制就OK(我之前理解错了,将其用GPIO固定低电平。。折腾半天瞎懵逼还在想为什么能读出device ID但是不能操作寄存器)

采用I2C驱动时,没什么好说的,引脚定义参照datasheet就好,注意SCL和SDA要挂外部上拉电阻。
I2C的器件地址是可以设置的,demo code中的地址是其中一种8位地址,在填入I2C驱动时要先右移1位再加上R/W bit
nrf52832用I2C和SPI两种方式驱动LIS2DS12_第2张图片


采用SPI驱动时,需要注意芯片支持的是SPI_MODE3 也就是SCK常态为高电平,并且在SCK的上升沿采集数据

在写数据时,对寄存器地址做点处理: bit7 代表本次操作类型是读还是写

nrf52832用I2C和SPI两种方式驱动LIS2DS12_第3张图片

其他部分就是中规中矩的参照datasheet就能完成

我的代码修改:
nrf52832用I2C和SPI两种方式驱动LIS2DS12_第4张图片

修改完成后,读取device ID测试,并且对寄存器进行操作,写入数值再读出来查看是否写入成功

你可能感兴趣的:(nRF52832)