为任何系统增加USB引言有关通用串行总线(USB)的文章通常从USB是个人电脑的一个新连接标准开始讲起。谢天谢地现在不再需要如此做,因此本引言可以简短地写为:如果你有一个嵌入式系统并且想连到PC,主流的连接通道是USB。本文介绍了一款Maxim最新推出的芯片,MAX3420E,它可以很容易地把USB加入到任何系统中。本文主要着重于SPI接口,提供了实现通用SPI的C例程。最后给出了一个简单的USBHID(人机接口设备)—基于Windows的应急按钮程序。为任何系统增加USB微控制器(μC)的选择通常基于它所集成的外设。许多处理器集成了USB功能,但是大多数处理器,特别是一些低价位的处理器不含USB。有时,您可能选用了一个I/O和外设都很完美的微控制器,但它却缺少USB。您是否希望只是添加USB功能而继续使用当前的微控制器呢?利用Maxim的芯片MAX3420E,可以为任何处理器添加USB功能。MAX3420E集成了USB全速收发器、智能USB串行接口引擎(SIE)和一个可工作到26MHz时钟的从SPI接口。MAX3420E的使用如同一个具有单个控制端点、两个双重缓冲的64字节数据端点和一个64字节的中断端点的全速USB外设。总线供电图1.USB供电图1是一个普通的USB外设结构。USB的VBUS电源线为3.3V稳压器提供5V输入,该稳压器给微控制器和MAX3420E供电(无需墙上适配器)。SPI接口可以是3、4或5线。表1列出了5线接口。表1.使用3到5线的SPI接口如果应用中不需要中断(MAX3420E的中断条件可以通过读取寄存器直接检测到)s,可以去掉INT引脚,得到一个4线接口。如果SPI主机具有双向数据接口(MOSI/MISO),则可以省掉另外一条接口线,这样,没有中断、支持双向通信的SPI接口只需要3个引脚。如果微控制器没有SPI接口怎么办呢?没问题,可以很容易地设计一个直接触发GPIO的、固件形式的SPI主控器。USB的一个非常强的特性是自控流量能力,它自动配合SPI侧的任何速度(它利用在USB侧插入NAK握手来提示“忙,重试”)。很多USB外设,特别是与人接口的,即使与最低速的SPI接口都能应答自如。如果图1中的微控制器非常小,只有10脚以下怎么办呢?难道就不能把这些珍贵的I/O口用来连USB芯片了?不,这就是为什么MAX3420E提供了四个通用输出口和四个通用输入口的原因,它们可以替代被用掉的处理器上的I/O口,事实上你的系统在接上MAX3420E后还得到了更多的口线。大规模集成芯片图2.只连接大规模集成芯片的少许引脚MAX3420E不仅仅只限用于小系统。图2说明了如何给一个ASIC,FPGA,DSP和其他大芯片增加USB功能。这样做的一个明显原因是大芯片没有内建的USB或内部的USB不是正好符合你的所需。另一个原因是随着工艺尺寸的缩小,这些大片子不能兼容USB所需的3.3V“高”压,此时使用外部带低压SPI接口的USB芯片就是一个很好的方案。MAX3420E内带电平转换器,VL脚设定接口电平的范围,从1.7V到3.6V。隔离USB图3.隔离USB如图3所示,由于SPI接口信号是单向的,还很容易进行光隔。同时还可以设定较低的速率来支持廉价的光耦。SPI接口SPI(串行外设接口)是一个简单的串行接口,它使用两根数据线,一根串行时钟和一个片选信号。SPI主控把SS#拉低来开始传输,然后驱动串行时钟SCLK来把数据同步输入和输出从设备。SPI主控通过把SS#拉回到高电平,以终止传输。SPI接口有四种时钟模式,反映了两个信号CPOL(时钟极性)和CPHA(时钟相位)的两个状态。这两信号以(CPOL,CPHA)的形式来表示。可以证明一个接口利用正沿SCLK且在第一个正沿时钟到来以前MOSI数据已经准备就绪可以工作在(0,0)和(1,1)模式而无需任何改变。这一属性使MAX3420E无需额外的模式引脚设置,就可以工作在(0,0)或(1,1)模式。图4和图5显示了利用SPI模式在微控制器(MAXQ2000,随后介绍)和MAX3420E之间的数据传输。图4所示为(0,0)模式,图5所示为(1,1)模式。两者的区别是SCLK信号的无效电平不同,(0,0)是低无效,(1,1)是高无效。MAX3420E每次传输接收的第一个字节是命令字节。命令字节包含寄存器号和方向位,第二个字节和后续字节包含数据。在图4和图5中,移入命令字时,来自MAX3420E(MISO引脚)的8位数据是USB状态位。此特性只在使用分离MISO和MOSI脚的接口中有效。SPI代码编写MAX3420E通用C代码的窍门是把原始的...