无线电爱好网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

SPI协议详解(以ADS1118为例)

2024-5-8 08:57| 发布者: 闪电| 查看: 8| 评论: 0

摘要: 最近要写一个协议,所以再复习一次SPI。一开始先分析了SPI的协议特点,使用ADS1118这个器件作为承载物进行分析,后面用逻辑分析仪从位到字节进行解码,最后使用TI给的demo移植到STM32平台。SPI是一个环形总线结构, ...


下面就是两个字节变成了一word-16bit

25a7f858-0a00-11ef-a297-92fbcf53809c.png

25af52a6-0a00-11ef-a297-92fbcf53809c.png

第二个字节

25ba3d6a-0a00-11ef-a297-92fbcf53809c.png

大概就是这样的解码啦

25bec704-0a00-11ef-a297-92fbcf53809c.png

这就是解码出来的第一个数据

25c5ea7a-0a00-11ef-a297-92fbcf53809c.png

前面是bit位,下一个是字节位,下一个是word位

25cbba5e-0a00-11ef-a297-92fbcf53809c.png

按照16字节来解码

25dc87f8-0a00-11ef-a297-92fbcf53809c.png

因为可以自由的传输任意的字节数据,也可以在这里自己定义这个事情

这里就开始移植,看这个TI的意思是随便整,推荐自己实现SPI的接口:

25f00be8-0a00-11ef-a297-92fbcf53809c.png

下载最后一个

2642dc92-0a00-11ef-a297-92fbcf53809c.png

这里先说一下头文件如何加

我们的工作是要在代码里面实现STM32的SPI接口移植,然后在线测量所有的参数来更加详细的学习SPI。

先看懂给的代码,明白要干啥:

2646f71e-0a00-11ef-a297-92fbcf53809c.png

这些是TI的库

NSS管脚及我们熟知的片选信号,作为主设备NSS管脚为高电平,从设备NSS管脚为低电平。

当NSS管脚为低电平时,该spi设备被选中,可以和主设备进行通信。在stm32中,每个spi控制器的NSS信号引脚都具有两种功能,即输入和输出。所谓的输入就是NSS管脚的信号给自己。所谓的输出就是将NSS的信号送出去,给从机。

对于NSS的输入,又分为软件输入和硬件输入。

软件输入: NSS分为内部管脚和外部管脚,通过设置spi_cr1寄存器的ssm位和ssi位都为1可以设置NSS管脚为软件输入模式且内部管脚提供的电平为高电平,其中SSM位为使能软件输入位。SSI位为设置内部管脚电平位。同理通过设置SSM和SSI位1和0则此时的NSS管脚为软件输入模式但内部管脚提供的电平为0。若从设备是一个其他的带有spi接口的芯片,并不能选择NSS管脚的方式,则可以有两种办法,一种是将NSS管脚直接接低电平。另一种就是通过主设备的任何一个gpio口去输出低电平选中从设备。

硬件输入: 主机接高电平,从机接低电平。

265e61a6-0a00-11ef-a297-92fbcf53809c.png

2662917c-0a00-11ef-a297-92fbcf53809c.png

这样

26669d6c-0a00-11ef-a297-92fbcf53809c.png

cs 自己换普通gpio,好像是自动的引脚有些问题

267774de-0a00-11ef-a297-92fbcf53809c.png

外部晶振为8MHz

1选择外部时钟HSE 8MHz

2PLL锁相环倍频9倍

3系统时钟来源选择为PLL

4设置APB1分频器为 /2

5使能CSS监视时钟

2688506a-0a00-11ef-a297-92fbcf53809c.png

后来我找到了中文的数据手册

269cb352-0a00-11ef-a297-92fbcf53809c.png

这个地方 4 种模式选择

26e186b2-0a00-11ef-a297-92fbcf53809c.png

打开窗口

26e5db18-0a00-11ef-a297-92fbcf53809c.png

打开中断

26f07000-0a00-11ef-a297-92fbcf53809c.png

编译 Ok

26f50ef8-0a00-11ef-a297-92fbcf53809c.png

这个是TI硬件层的所有东西,一会儿就重写

27053e0e-0a00-11ef-a297-92fbcf53809c.png

ti 的板子我用的少

272a75c0-0a00-11ef-a297-92fbcf53809c.png

中断状态

27465c40-0a00-11ef-a297-92fbcf53809c.png

开启中断

275e6b14-0a00-11ef-a297-92fbcf53809c.png

开启中断引脚

276272b8-0a00-11ef-a297-92fbcf53809c.png

下降边沿触发中断

27735182-0a00-11ef-a297-92fbcf53809c.png

这个有用

因为STM32的SPI中断和TI的中断对不上,下面就看HAL的API:

2787d864-0a00-11ef-a297-92fbcf53809c.png

SPI的中断有这些

27a5461a-0a00-11ef-a297-92fbcf53809c.png

所有的函数

27b1c200-0a00-11ef-a297-92fbcf53809c.png

中断

27be89c2-0a00-11ef-a297-92fbcf53809c.png

在main里面的文件

27d29106-0a00-11ef-a297-92fbcf53809c.png

我要做的工作是在HAL文件里面构建STM32 SPI的硬件重构

27e25b0e-0a00-11ef-a297-92fbcf53809c.png

需要实现的是ms和us的延时,CS的控制和收发功能

27ee1cb4-0a00-11ef-a297-92fbcf53809c.png

SPI函数

280c9126-0a00-11ef-a297-92fbcf53809c.png

这里是延时和CS的实现

ADS1118的内部就可以不用管了。别看写的简单,debug也很耗时。

28289e2a-0a00-11ef-a297-92fbcf53809c.png

编译无错误,移植完成

283f5322-0a00-11ef-a297-92fbcf53809c.png

可以看看ADS1118的定位

https://www.stmcu.com.cn/Designresource/detail/software/711298

术语表:

Standard SPI: CLK, /CS, DI, DO, /WP, /Hold Dual SPI: CLK, /CS, IO0, IO1, /WP, /Hold Quad SPI: CLK, /CS, IO0, IO1, IO2, IO3 SIO0(serial io 0)

接口说明

CLK(Serial Clock):时钟线

/CS(Chip Select):片选接口

DI(Serial Data Input):数据输入端口

DO(Serial Data Output):输出输出端口

2919473a-0a00-11ef-a297-92fbcf53809c.png

2930b12c-0a00-11ef-a297-92fbcf53809c.png

12

路过

雷人

握手

鲜花

鸡蛋

QQ|关于本站|小黑屋|Archiver|手机版|无线电爱好网 ( 粤ICP备15040352号 ) 无线电爱好技术交流5 无线电爱好技术交流1无线电爱好技术交流9开关电源讨论群LED照明应用、电源无线电爱好技术交流4无线电爱好技术交流8无线电爱好技术交流10无线电爱好技术交流11

粤公网安备 44030702001224号

GMT+8, 2024-5-8 08:58 , Processed in 0.109200 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

返回顶部