新闻中心

EEPW首页>嵌入式系统>设计应用> 单片机 arm 常用的接口总结

单片机 arm 常用的接口总结

作者: 时间:2016-11-26 来源:网络 收藏
常用的接口有spi,I2c,uart等,他们都有自己的协议规定,下面谈谈它们之间的联系与区别:

1 I2C总线

本文引用地址://m.amcfsurvey.com/article/201611/321770.htm

涉及到I2C的编程主要涉及到两种情况:有专用控制器的arm芯片,无控制器的单片机芯片。有控制器的arm芯片,主要就是依据数据手册,通过设置相应的寄存器(控制寄存器,状态寄存器等)来实现相应的操作;然而对于没有控制器的单片机芯片,只有通过相应的引脚根据I2c协议来予以模拟实现。

首先来谈谈I2c协议。涉及到的信号主要分为三类:开始信号,停止信号,发送数据。既然是协议,就是双方事先约定好的规定,通信双方按照这个标准来进行数据的传输就可以了。保证数据传输的一致性的话,还有在某些时候发送一些附带的检查信息,例如ack信号,非ack信号;

开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。
应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。

基于单片机的模拟I2C的信号,应该严格按照以上的时序进行研究实现。

接下来看看带有I2C的控制器的arms3c2410,s3c2440芯片的i2c的控制。主要包括四个相关的寄存器的设置:通过它们之间的相互配合,实现i2c的数据传输。

IICON:控制寄存器。主要是用于控制是否发出ACK信号,设置发送器的时钟,开启I2c中断,并标示中断是否发生。

  IISTAT: 状态寄存器。选择I2C的工作模式,发出S信号,P信号,使能接受/发送功能,并标示各种状态,比如总线仲裁是否成功,作为从机时是否被寻址,是否接收到0地址,是否接收到ACK信号。

IICADD:多主机I2C地址寄存器;

IICDS:发送、接受数据移位寄存器;

接下来按照数据手册,根据其主机发送器的工作流程来编写相应的代码。

三个函数就可以实现简单的I2C协议:读取,写入,中断;

编程思路如下:

写函数,读函数,仅仅是启动I2C传输,然后等待,直到数据在中断服务程序中传输完毕后再返回。

2 SPI总线协议的认识(SPI中的极性CPOL和相位CPHA)

【背景】

最近在看关于Silicon Labs的C8051F347的某个驱动中,关于SPI部分初始化的代码,看到其对于SPI的设置为CPOL=1,CPHA=0,对于CPOL及CPHA的含义不了解,想要搞懂,这两个参数到底是什么意思,以及为何要这么设置。所以才去找了SPI的极性和相位的相关资料,整理如下。

【SPI基础知识简介】

设备与设备之间通过某种硬件接口通讯,目前存在很多种接口,SPI接口是其中的一种。

SPI中分Master主设备和Slave从设备,数据发送都是由Master控制。

一个master可以接一个或多个slave。

常见用法是一个Master接一个slave,只需要4根线:

SCLK:Serial Clock,(串行)时钟

MISO:Master In Slave Out,主设备输入,从设备输出

MOSI:Master Out Slave In,主设备输出,从设备输入

SS: Slave Select,选中从设备,片选

SPI由于接口相对简单(只需要4根线),用途算是比较广泛,主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。即一个SPI的Master通过SPI与一个从设备,即上述的那些Flash,ADC等,进行通讯。
而主从设备之间通过SPI进行通讯,首先要保证两者之间时钟SCLK要一致,互相要商量好了,要匹配,否则,就没法正常通讯了,即保证时序上的一致才可正常讯。而这里的SPI中的时钟和相位,指的就是SCLk时钟的特性,即保证主从设备两者的时钟的特性一致了,以保证两者可以正常实现SPI通讯。

【SPI相关的缩写或说法】

先简单说一下,关于SPI中一些常见的说法:

SPI的极性Polarity和相位Phase,最常见的写法是CPOL和CPHA,不过也有一些其他写法,简单总结如下:

(1) CKPOL (Clock Polarity) = CPOL = POL = Polarity =(时钟)极性;

(2) CKPHA (Clock Phase) = CPHA = PHA = Phase =(时钟)相位;

(3) SCK=SCLK=SPI的时钟;

(4) Edge=边沿,即时钟电平变化的时刻,即上升沿(rising edge)或者下降沿(falling edge);

对于一个时钟周期内,有两个edge,分别称为:

Leading edge=前一个边沿=第一个边沿,对于开始电压是1,那么就是1变成0的时候,对于开始电压是0,那么就是0变成1的时候;

Trailing edge=后一个边沿=第二个边沿,对于开始电压是1,那么就是0变成1的时候(即在第一次1变成0之后,才可能有后面的0变成1),对于开始电压是0,那么就是1变成0的时候;

本文采用如下用法:

极性=CPOL

相位=CPHA

SCLK=时钟

第一个边沿和第二个边沿

【SPI的相位和极性】

CPOL和CPHA,分别都可以是0或时1,对应的四种组合就是:

Mode 0 CPOL=0, CPHA=0
Mode 1 CPOL=0, CPHA=1
Mode 2 CPOL=1, CPHA=0
Mode 3 CPOL=1, CPHA=1

结合这个图已经很清楚的认识到,极性和相位主要是控制什么东东了.cpol等于0时,时钟的空闲电平就是0;cpol等于1时,空闲电平就是1;而cpha决定了数据采样的时刻,是第一个边沿的时候,还是第二个边沿的时候。

【如何看懂和记忆CPOL和CPHA】

所以,关于在其他地方介绍的,看似多么复杂难懂难记忆的CPOL和CPHA,其实经过上面解释,就很容易看懂了:

去看时序图,如果起始的始终SCLK的电平是0,那么CPOL=0,如果是1,那么CPOL=1,

然后看数据采样时刻,即时序图数据线上的数据那个矩形区域的中间所对应的位置,对应到上面SCLK时钟的位置,对应着是第一个边沿或是第二个边沿,即CPHA是0或1。(对应的是上升沿还是还是下降沿,要根据对应的CPOL的值,才能确定)。

即:

(1)如何判断CPOL:SCLK的空闲时候的电压,是0还是1,决定了CPOL是0还是1;

(2)如何判断CPHA:而数据采样时刻对应着的SCLK的电平,是第一个边沿还是第二个边沿,对应着CPHA为0还是1。

【软件中如何设置SPI的极性和相位】

SPI分主设备和从设备,两者通过SPI协议通讯。

而设置SPI的模式,是从设备的模式,决定了主设备的模式。

所以要先去搞懂从设备的SPI是何种模式,然后再将主设备的SPI的模式,设置和从设备相同的模式,即可正常通讯。

对于从设备的SPI是什么模式,有两种:

(1)固定的,有SPI从设备硬件决定的

SPI从设备,具体是什么模式,相关的datasheet中会有描述,需要自己去datasheet中找到相关的描述,即:

关于SPI从设备,在空闲的时候,是高电平还是低电平,即决定了CPOL是0还是1;

然后再找到关于设备是在上升沿还是下降沿去采样数据,这样就是,在定了CPOL的值的前提下,对应着可以推算出CPHA是0还是1了。

举例1:

CC2500- Low-Cost Low-Power 2.4 GHz RF Transceiver的datasheet中SPI的时序图是:

从图中可以看到,最开始的SCLK和结束时候的SCLK,即空闲时刻的SCLK,是低电平,推导出CPOL=0,然后可以看到数据采样的时候,即数据最中间的那一点,对应的是SCLK的第一个边沿,所以CPHA=0(此时对应的是上升沿)。

举例2:

SSD1289- 240 RGB x 320 TFT LCD Controller Driver的datasheet中提到:

“SDI is shifted into 8-bit shift register on every rising edge of SCK in the order of data bit 7, data bit 6 …… data bit 0.”

意思是,数据是在上升沿采样,所以可以断定是CPOL=0,CPHA=0,或者CPOL=1,CPHA=1的模式,但是至于是哪种模式。

按理来说,接下来应该再去确定SCLK空闲时候是高电平还是低电平,用以确定CPOL是0还是1,但是datasheet中没有提到这点。

所以,此处,目前不太确定,是两种模式都支持,还是需要额外找证据却确定CPOL是0还是1.

(2)可配置的,由软件自己设定

从设备也是一个SPI控制器,4种模式都支持,此时只要自己设置为某种模式即可。

然后知道了从设备的模式后,再去将SPI主设备的模式,设置为和从设备模式一样,即可。

对于如何配置SPI的CPOL和CPHA的话,不多细说,多数都是直接去写对应的SPI控制器中对应寄存器中的CPOL和CPHA那两位,写0或写1即可。


上一页 1 2 下一页

关键词:单片机arm接口总

评论


技术专区

关闭