常见通讯接口 点击:1499 | 回复:0



wangbao_488

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 0回
  • 年度积分:0
  • 历史总积分:3
  • 注册:2010年3月02日
发表于:2010-03-02 21:08:25
楼主
本文主要介绍几种常见的接口与外设,供嵌入式研究初学者参考借鉴。
  1、经典串口UART
  没有哪款CPU会没有这个接口,可见其经典。实际应用中常见的是3线串口(只用收、发和GND三根线)和9线串口(用于modem通讯)。然后根据传输过程的电气规范,又可分为RS232、RS485、RS422等。
  使用UART需要收发双方设置好相同的波特率、起始停止位数、奇偶校验位。MCU TO MCU的通讯不存在电平转换问题,MCU TO PC则要使用电平转换芯片,MAX232(5V)、MAX3232(3.3V) 最常用。UART口到目前为止还是最常用的调试程序的打印信息输出口,STC系列的51单片机更是一律需要通过UART口编程。
  在MCU侧设置波特率时是根据UART口的时钟源来算分频系数的。如果发现MCU的串口有输出数据但接收端收到的数据值不对,十有八九是波特率寄存器值没设对,剩下的百分之一可能是没处理好数据位数(7位还是8位)和奇偶校验位。
  另外,UART串口完全可以用IO口模拟。
  2、同步串口SPI
  四根信号引脚:SCLK、MISO、MOSI、CE(片选)。之所以称为同步是因为收发双方是严格按照SCLK的节奏来动作的。因此数据速度可以到达10Mbps,但传输距离就不能远了,几米范围内。
  数据收发是主从式的,主发,从收。在时序上需要注意的是主在发送一字节数据后,需要接着发送一字节的哑数据(dummy data)以维持SCLK线上的同步时钟脉冲,因为从机要接受该字节数据就依赖于这个哑字节所带来的SCLK脉冲的持续。通常哑字节是0x0或者0xff。具体看器件的数据手册。
  3、 I2C总线
  值得注意的是,这种总线中,同一类器件的地址是预指定的。很多EEPROM、ADC、DAC都是I2C接口的。
  4、USB
  5、SD和MMC卡接口
2410和2440有此接口。
  6、 ATA硬盘、DOC电子盘接口
  7、 微型打印机接口
跟PC的打印机口是一样的。关键控制引脚就是Busy、Error、STROBE。时序也非常简单。有兴趣的朋友编个DOS下的C程序,调用outportb()函数往PC打印机口的0x378地址写数据、往0x37a写控制信号,调用inportb()函数从0x379读打印机状态,就可以驱动打印机了。当然还需要了解一下简单的打印机控制命令。使用热敏式微型打印机的时候需要注意设计好电源,要有足够的能力,因为热敏打印时要求的持续电流比较大。
  8、CAN总线接口
  类似于以太网的CSMA/CD的总线冲突检测机制,但是与以太网不同,CAN网络使用标识符(其实即CAN节点的地址)来进行按位仲裁以解决访问冲突,数值高的标识符自动获得总线控制的优先权。CAN是一个广播类型的总线,所有节点都接收总线上的数据,硬件上的过滤机制决定消息是否提供给该接点用。
  在嵌入式应用中使用CAN总线,可以直接使用带CAN总线控制器(controller)的CPU,如DSP 2407,然后外加一片CAN收发器(Tranceiver)如82C250或者MCP2551。假如CPU没有CAN控制器,也没问题,可以用SPI口外挂一片MCP2515,然后再加一片收发器。CAN 控制器芯片再加上收发器可以完成CAN通讯网络的物理层和MAC层功能,能反馈报文发送或接收过程的错误与状态,用起来不会比用UART更复杂。所以说硬件电路是很简单的。关键在于通讯网络中应用层的协议。这是软件的工作了。
  9、以太网接口
  早年刚流行时常用8019芯片来实现基于IEEE802.3标准的MAC层和PHY层收发,现在流行CS8900等。用于单片机控制网络中的以太网从硬件上乏善可陈,主要工作量在软件上,stack的实现,需要了解802.3的协议,以及更高层的协议,如TCP/IP协议族,这些都是软件方面的工作了,不表。
  10、功能模块
  红外、蓝牙、wifi、GSM/GPRS、CDMA等无线通信功能通常是以一个模块的方式提供,提供跟MCU的接口不外乎是UART、SPI、并行总线、USB这些,只要掌握了前面的各种接口,就没有半点问题。
  11、 显示器件
  嵌入式系统的显示器件很多,从数码管到各种形状可定制的液晶模组到点阵式液晶模组到伪彩STN屏到真彩TFT LCD都有。数码管和LED的应用可以很简单也可以很复杂,不在本文讨论范围之内。主要讲讲常用的点阵式液晶模组以及STN屏的嵌入式系统接口。
  点阵式液晶模组LCM
  如果用过98年开始流行的IC卡电话,应该记得电话机上那个泛着黄绿色底光的显示屏,那种就是点阵式液晶模组,称为LCM。那时候用的是1602或者12232。1602的字库只支持ASCII码,1602的意思是只有两行,每行最多只能显示16个英文字符。12232支持二级汉字库,也是只能显示两行,每行最多显示8个汉字或16个ASCII字符。12864也渐渐用的多起来,支持显示四行,每行最多8个汉字。
  1602接口是8位并行总线的,即跟SRAM一样,像访问SRAM一样访问1602即可。
  12232和12864的接口有选择,有些是如1602是8位的并行总线接口,有些是跟UART一样,是一收一发的串行接口。IO口紧张的情况下,当然用串行接口的模组要省脚了,只需要两个IO。
  在硬件接口上,需要注意的有两点。LCM一般有一个引脚叫“液晶显示偏压”信号,LCM采集该引脚上的电压值(0~5V),根据电压值的大小调节LCM的显示亮度。调试程序时如果发现屏上一片白或一片黑,看不到字,也许就是该脚的电压给的不对,我记得大概在4V左右会比较合适,记不清了,多年前做过。一般用两只电阻分压,如果想可调,上个电位器,但是成本高了。
  另一点,背光工作电流在5mA左右,需要串联限流电阻以调节背光强度,太强的背光会缩短背光LED的寿命。如果要做到背光的亮灭可控,只要在背光电路中串联一只三极管,如8050,用MCU或者逻辑电路来控制三极管基极通断。
  LCM模组内部,其实确有一块RAM的(所以难怪接口类似SRAM),编程的时候,直接写RAM的相应地址,屏上相应的位置就会出现字符了。如果需要做动画等效果,就需要程序直接控制到某个像素点。
  STN屏
  早期使用的STN彩色屏很多是sharp公司的屏,具有代表性,典型分辨率是320×240。其接口信号线定义如下:
  序号 引脚符号 描述
  1 YD 帧同步信号
  2 LP 行数据锁存信号
  3 XCK 行数据时钟信号
  4 DISP 控制屏是否显示的信号
  5 VDD 电源
  6 VSS 地
  7 VEE 背光电源
  8 D0~D7 8位显示数据
  写满一屏的数据称为1帧,YD是帧同步数据,也即是由YD脉冲启动新一帧数据的写入。两个YD脉冲之间的时间长度显然就是帧周期,也即LCD刷屏的周期,其倒数是我们熟悉的刷新率,对于这款Sharp LCD屏,频率一般70~80Hz。
  LP是行(共240行)数据输入锁存信号,也就是行同步脉冲信号。该信号启动新一行数据的写入,所以显然每帧中包含240个LP脉冲。
  XCK是行数据输入信号,是每行中每一像素点数据传输的时钟信号,每8个字节的数据在XCK的下降沿出被锁存。
  DISP控制屏是否显示,如果L电平 ,那屏幕就不显示,类似于显示器被关了。
  在硬件上STN和TFT屏的驱动偏置电压产生电路与背光电路比LCM复杂很多。
  STN/TFT LCD的驱动需要正电压或者负电压偏置,而大多数嵌入式子系统都是5V电源,因此需要DC-DC变换电路。我使用过ANDORIN专为LCD负电压偏置而设计的adp05c24,是产生-24V的可调DC变换器。或者采用如MAX680、摩托的34063等DC-DC芯片也可做到正负电压电源。
  LCD背光,中大点阵的STN型与TFT型LCD,多为白色(红绿蓝色调)CCFL背光,一般为25kHz~100kHz、300V以上交流驱动。该交流驱动目前多使用外加一块拇指大小的驱动板,特征是其上有个小变压器,实现5V输入,300V以上交流驱动的输出。或者用成品的背光模块,如森宝的VET-N1210-01 CCEL模块,用IC器件搭建背光电路,可以紧凑设计结构并降低成本。
  以上是LCD屏的电路接口,幸运的话CPU这边有对应的LCD控制器接口,譬如44b0,就有STN屏的接口,外部接口信号一般跟屏是对应的,如44b0,VFRAME跟YD对应,VLINE跟LP对应,VCLK跟XCK对应,VM跟DISP对应,等等


热门招聘
相关主题

官方公众号

智造工程师