单片机学习过程中协议是非常重要的,这里先记录几个协议,后面可能会继续添加
IIC协议
简介
一种半双工的通信方式,由数据线SDA和时钟线SCL构成。发送时高位在前低位在后,要确定IIC工作要确定下述条件(也就是通信过程中的步骤): * 空闲状态 * 开始状态 * 停止信号 * 应答信号 * 数据的有效性 * 数据的传送
空闲状态
一般SDA和SCL都为高电平时为空闲状态,由上拉电阻拉高。
起始信号与停止信号
- 起始信号:SCL为高,SDA由高变低。
- 终止信号:SCL为高,SDA由低变高。
- 注:由上述可以看出,传输数据过程中,SCL为高电平时不要改变SDA状态。
应答信号
在传输完一个字节后,发送器释放数据总线(改变为上拉的接收模式)。判断接收器是否在下一个时钟发送一个低电平。
ACK:下一个时钟时为低电平
NACK:下一个时钟时为高电平(一般用Ā表示)
数据的有效性
有效的数据在高电平期间数据不会改变,如下图所示:
数据的传送
一个时钟周期传送1bit的数据
SPI协议
简介
SPI是一种全双工通信方式,由两根数据线MISO、MOSI,一根时钟线SCLK,一根片选线CS总共4跟线构成。相当于两个移位寄存器构成的循环移位寄存器,如下图所示:
一般使用SPI都为硬件实现,在SPI开始工作前我们要确定如下配置:
- 空闲状态
- 数据采集
- 数据格式
- 状态标志
- 主机或从机
- 速度
时钟空闲状态
确定时钟空闲时的状态,根据要驱动的外设确定。
数据采集
确定数据采集的时刻,为哪一个边沿时采集数据。根据哪个边沿和时钟空闲时状态就可以确定在哪一个时刻采集数据。
数据格式
确定数据帧的格式,确定MSB在前还是LSB在前,8位还是16位。
状态标志
在使用SPI时可能会出现的状态,一般有下面几种状态: 1. 发送缓冲器空闲 2. 接收缓冲器非空 3. 忙
状态和中断配合使用,可以确定什么时候进入中断执行相应的操作
特殊说明
- NSS 是指CS位,可以选择是否使用硬件NSS
- Frame Format 帧格式有摩托罗拉和TI(TI的其实叫SSP而不是SPI)
串行UART通信
串行通信简介
UART 为串行异步全双工通信,串行通信由于时钟不同步,起始信号和终止信号之间传输的数据量一般不大(仅为1个字节左右)。它由两根线(一根TX,一根RX构成)下图为连接方式:
一般串行通信过程为:起始、数据、校验(可选)、结束(1-2位)如下图。
所以串行通信要配置的信号如下所示:
- 数据位数(九位模式下最后一位可以表示发送的信号为地址或数据)
- 是否启用奇偶校验(默认不启用)
- 停止位的个数(默认1位)
- 波特率(重要的选项,前面可以少配置)
FSMC
FSMC简介
FSMC也不算协议,是灵活的静态存储控制器,能够与同步或异步存储器和16位PC存储器卡连接。FSMC分为多个存储块,STM32F4的FSMC把1G的空间平均分为4块,每块有256M,然后每个块分为4个区,每个区大小64M,不同区之间的寻址通过区控制寄存器选择,其他则通过26位地址宽度寻址,实际上反应到外面的地址并不是28位的地址宽度,而是1个片选线加上25位的宽度(片选线有4根,相当于2位地址)。
stm32中使用fsmc后的sram等设备可以很方便的寻址,写入和擦除等,跟内部sram差别不大。
FSMC控制线
- 地址线(如A0-A25)
- 数据线(如D0-D15)
- 写信号(WE,即WR)
- 读信号(OE,即RD)
- 片选信号(CS)
- 字节控制(某些SRAM支持,即UB/LB)
注意事项
- 16位模式和8位模式对应的内部总线的最低为不同,16位时要左移1位,因为地址增加时2个字节的增加的。
- FSMC有不同模式,不同模式对应不同的存储芯片,可以用芯片手册和FSMC对应(比如模式A可以独立设置读取和写入)。
- 突发(burst),与其说是突发,倒不如说时连续。突发访问感觉像是翻译上的失误,突发访问其实就是连续访问,写一个地址后连续读出接下来的一些数据(而不是一个地址一个数据)。
- stm32中fsmc用
u32 test[100] __attribute__((at(0x680000)));
的方式进行地址的定义。