嵌入式硬件通信接口协议:,(一)协议根源

2018年12月26日 巨龙国际平台

le=text-indent: 2em; text-align: left;spi是串行外设接口(serialperipheral 是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为pcb的布局上撙节空间,提供方便,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议,比如at91rm9200。le=”text-indent: 2em; text-align: left;”>spi是串行外设接口(serialperipheral 是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为pcb的布局上撙节空间,提供方便,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议,比如at91rm9200。–from 百度百科该接口由摩托罗拉在20世纪80年代中期开发,并已成为事实标准。

  –from wiki从维基百科查阅的的“事实标准”,在这来科普一下知识盲点:事实标准是指非由标准化构造拟订的,而是由处于技术领先地位的企业、企业集团拟订(有的还需行业联盟构造认可,如dvd标准需经dvd论坛认可),由市场实际接纳的技术标准。–from 百度百科spi接口定义了一主多从这样的一个通信架构,在同一spi总线上只有一个主机,可以有多个从机。

  这样的架构就限制了通信的主动权只能在主机端,主机发起一次通信,从机做出想要。信号线spi被称为四线串行总线,其信号线分别有:sclk:串行时钟(主机输出)mosi:主输出从机输入或主机输出从机输入(主机输出的数据)miso:主输入从输出或主输入从输出(从输出的数据输出)ss:从机选择(通常为低电平有用,主机输出)信号线命名也是五花八门,以下的命名也是会遇见的:串口时钟:sclk:sck主输出—从输入(mosi):simo,mtsr – 对应主设备和从设备上的mosi,相互连接sdi,di,din,si – 在从设备上; 连接到主设备上的mosi,或连接到下面的连接sdo,do,dout,so – 在主设备上; 连接到从站上的mosi,或连接到上面的连接主输入—从输出(miso):somi,mrst – 对应主设备和从设备上的miso,相互连接sdo,do,dout,so – 在从设备上; 连接到主设备上的miso,或连接到下面的连接sdi,di,din,si – 主设备; 连接到奴隶上的miso或上面的连接从机选择:ss:ssel,cs,ce,nss,/ ss,ss#以上容易让人指鹿为马的名字是sdo、sdi、dout、din等,这些都需要看具体印在主设备还是从设备上单独讨论。但是一般的还是尽量写清写规范,这样不容易产生歧义。spi作为同步串行接口,可以认为有两个同步信号,第一个是从机选择ss信号,告知被选中的从机,准备最先进行spi通信,第二个是同步时钟信号sclk,收发双方进行数据的交互时,都是基于sclk的跳变进行逐bit输出和采样的。

  四根信号线并非全部都需要,根据工作模式,可以配置成两线、三线。

  在stm32cubemx工具的配置页面,可以很清楚看到,配置不同的工作模式时,对应被使能的芯片管脚有何不同:

对比发现,全双工的四线和三线的区别是从机选择信号nss。这种情况一般是原由spi总线上只有一主一从的通信架构,从机的nss信号一斩钉截铁低电平,不需要做从机选择。信号时序四线spi接口的时序一般的总是先拉低从机选择信号线ss,然后输出sclk,带着数据mosi,此时miso为高阻态。

  大致如下如:

一般有spi接口的器件,在spec上都会有对应的时序图,这里分别截取spi接口flash型号为gd25q32c、spi接口oled型号为qg-2832tlbfg04,这两器件的spec内关于spi时序部分的介绍,如下两张截图: