抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

单片机学习过程中协议是非常重要的,这里先记录几个协议,后面可能会继续添加

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. 忙

状态和中断配合使用,可以确定什么时候进入中断执行相应的操作

特殊说明

  1. NSS 是指CS位,可以选择是否使用硬件NSS
  2. 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)

注意事项

  1. 16位模式和8位模式对应的内部总线的最低为不同,16位时要左移1位,因为地址增加时2个字节的增加的。
  2. FSMC有不同模式,不同模式对应不同的存储芯片,可以用芯片手册和FSMC对应(比如模式A可以独立设置读取和写入)。
  3. 突发(burst),与其说是突发,倒不如说时连续。突发访问感觉像是翻译上的失误,突发访问其实就是连续访问,写一个地址后连续读出接下来的一些数据(而不是一个地址一个数据)。
  4. stm32中fsmc用 u32 test[100] __attribute__((at(0x680000))); 的方式进行地址的定义。

评论