首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

单片机 arm 常用的接口总结

单片机 arm 常用的接口总结

常用的接口有spi,I2c,uart等,他们都有自己的协议规定,下面谈谈它们之间的联系与区别:

1 I2C总线

   涉及到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传输,然后等待,直到数据在中断服务程序中传输完毕后再返回。

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

  【背景】

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


SPI基础知识简介】


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


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


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


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


SCLKSerial Clock,(串行)时钟


MISOMaster In Slave Out,主设备输入,从设备输出


MOSIMaster 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,最常见的写法是CPOLCPHA,不过也有一些其他写法,简单总结如下:


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


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


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


(4) Edge=边沿,即时钟电平变化的时刻,即上升沿(risingedge)或者下降沿(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=时钟


第一个边沿和第二个边沿

继承事业,薪火相传
返回列表