USB接口单片机SL11R的特点及应用
扫描二维码
随时随地手机看文章
1 USB接口简介
USB总线是通用串行总线(Universal Serial Bus)的简称,已经成为PC机的标准接口。目前586以上的PC机基本上都已经配置了USB接口。USB接口具有数据传输速率高、使用方便等特点。USB1.1协议规定的全速传输速率为12Mbit/s,而USB2.0协议所规定的高速传输速率为480Mbit/s,非常适合有大量数据传输的系统。USB设备即插即用,无需重新启动计算机。
2 SL11R介绍
2.1 SL11R概述
SL11R是Scanlogic公司的SL11产品家族的一员,是一种带USB接口的16位单片机,内部运行频率为48MHz,采用RISC结构,有16位数据总线,32位通用I/O口(GPIO),其中22位可作为地址总线进行寻址(A0~A21),可以直接扩展多种外设。
2.2 SL11R主要特点
·USB接口 SL11R的USB接口符合USB1.1协议,有四个端点(endpoint),两种数据传输速率,全速模式为12Mbit/s,低速模式为1.5Mbit/s,并且具有USB协议所规定的四种数据传输方式,即控制传输方式(Control mode)、同步传输方式(Iochronous mode)、中断传输方式(Intrerupt mode)、批量传输方式(Bluk mode)。
·硬件资源丰富 SL11R有3K字节的内部RAM、两个定时器、两个外部中断、一个看门狗电路、一个普通串行接口(UART)、32位通用可编程I/O口(GPIO)、一个16位的可编程DMA接口、四个PWM输出引脚及扩展外围元件用的控制引脚。SL11R的外围元件扩展非常方便,扩展EPROM、串行E2PROM、SRAM即EDO DRAM等常用元件时均无需另加控制电路。
·多种工作方式 SL11R有四种工作模式,即通用输入输出模式、快速增强并行端口模式、8位/16位DMA模式、DVC8位DMA模式,可根据实际应用场合用软件进行设置。尤其8位DVC模式,可以直接与CCD接口,方便地开发CCD图像采集系统或数码相机。
·无需专用开发装置 SL11R内部有3K×16位的程序存储器,类似于80X86的BIOS,已经把单片机的启动配置、联机调试及常用功能等固化在内部,开发者直接调用即可。CPU复位后,内部BIOS会把外部程序存储器中的代码读入内部RAM中执行。如果没有外部程序存储器,SL11R会自动运行在监控状态,与PC机进行联机通讯,并能够在线对线路板上的串行EEPROM进行编程或直接调试程序。由此可见,SL11R无需专用开发装置就可以进行开发,这一点对开发者非常有利。由于SL11R可以在线编程,这就意味着即使用户也可以进行软件升级。这一点对新产品开发很必要,因为有些BUG可能要用户使用后才能发现。
2.3 SL11R工作方式简介
·通用输入输出模式(GPIO模式) 在这种模式下,SL11R的外部有32个通用输入输出引脚,其中4个已经分配给USB和UART串行接口专用,其他28个引脚可以通过软件编程,分别设置成输入或输出状态。这种模式一般用于处理普通的外部并行接口类设备的数据,是用途较广的模式。
·快速增强并行端口模式(Fast EPP模式) 快速增强并行端口(Fast EPP)是计算机外设的一种标准并行接口。SLR11R在这种模式下,可以直接读写快速EPP并行增强端口。一般用于USB接口和Fast EPP接口的转换。
·8位/16位快速DMA模式 SL11R的DMA模式包括邮箱协议(Mailbox Protocol)和DMA协议两种方式。邮箱协议工作方式允许外部处理器与SL11R进行异步通讯,它们通过邮箱的输入、输出寄存器交换数据。DMA协议工作方式一般用于SL11R与外部设备大量的数据高速传输。这种传输无需CPU的干预,而且允许外设直接与DRAM进行数据交换,适合数据量大的场合,如打印机、Modem、扫描仪等。
SL11R在DMA模式下,还有四个可编程的PWM输出引脚,可以控制DMA模式下的外设与不同的外设通讯,如连接CCD、CIS、COMS等图像传感器或其他外设。只要根据外设的控制要求对PWM编程,就可以控制外设在DMA模式下传输数据。
·DVC8位DMA模式 这种模式专门用于与CCD相机接口,SL11R通过串行方式控制CCD相机,图像数据以DMA的方式传给SL11R。
3 SL11R设计应用
3.1 SL11R硬件设计
SL11R的硬件设计比较简单,因为实际应用中一般的外围元件可以直接扩展。Scanlogic公司在开发套件中提供了一个比较完善的电路图,但对一些简单应用场合显得稍繁琐。事实上SL11R的内部有3K字节的RAM,在数据量不是特别大的场合,无需扩展外部数据存储器。图1是笔者设计的SL11R应用的一个基本电路,已经在实际项目中应用。
虽然SL11R经过编程可以使用12MHz晶振,但调试模式不支持12MHz,而且笔者在实际使用过程中发现,如果晶振质量不太好,电路稳定性稍差。故建议在条件许可的情况下,尽量使用48MHz的晶振。
SL11R的工作电压为3.3V,电路中其它元件均应选用低电压型器件。
Scanlogic公司提供的SL11R开发工具中附带有调试程序,在线调试时需要使用RS232口,所以电路中设计了RS232接口芯片。
3.2 SL11R固件设计
SL11R的固件直接控制CPU的运行,程序代码可以存储在外部EPROM或I2C串行EEPROM中,甚至可以存在主机上,在适当的时候下载到SL11R的内部运行。最简单的方式是把代码写到串行EEPROM中,因为SL11R提供了专用的工具软件可以直接对EEPROM在线编程,无需另外的编程装置。
3.2.1 SL11R程序结构
SL11R汇编语言的语法结构与80X86相似,而且也有内部BIOS。
MCS51等没有BIOS的单片机,需要开发者控制CPU的每一步运行,程序必须在某一段反复循环,程序结构见图2。SL11R由于有BIOS支持,它的程序结构就与MCS51有所区别。SL11R的主体循环是在BIOS内部,实际上用户程序一般只是BIOS的中断响应子程序。也就是说,开发者所编的SL11R的用户程序可以没有主循环体。SL11R的用户程序结构见图3。值得指出的是,开发者也可以摆脱BIOS的控制,程序不在BIOS内部循环。但该程序设计难度较大,因为这时开发者需要自己直接处理USB接口的底层软件,一般没有特殊要求不要使用这种方式。
3.2.2 SL11R的USB接口编程
SL11R的大部分功能都可以通过BIOS调用实现。USB的编程也是调用BIOS实现。SL11R复位后会自动配置USB接口,与主机建立USB通讯,一般情况下开发者可以不进行干预。
开发者主要使用的与USB有关的BIOS软件中断:
·USB_STAND_INT、USB_CLASS_INT、USB_VENDOR_
INT、USB_FINISH_INT 这些中断主要是为了实现USB通讯,其中USB_VENDOR_INT是接受主机控制指令中断,主机对SL11R的控制基本上都是通过它实现的。
·USB_SEND_INT、USB_RECEIVE_INT这两个中断用于USB发送、接收数据。可以通过配置,分别使用USB的四个端口。
3.3 主机软件设计
要开发SL11R主机软件,一种简单、快捷的方式是借助于SL11R开发工具包(SL11R DVK)。通过学习工具包中附带的例子程序可以在较短的时间内开发出一个应用软件,用户不需自己开发驱动程序。该工具包可以从ScanLogic公司的网站(www.scanlogic.com)下载得到。工具包中包括的内容有:通用驱动程序、例子程序和开发用的文档资料。对于一般的开发工作可以直接使用工具包中的驱动。用于Windows98系统的三个文件分别是: slusbgen.sys、usb2epp.sys和usbdev.inf。
在AppWizard (zip)源代码包中,可以找到用VC写成的主机例子程序(usbtest.exe)的源代码。其中有几个文件对利用ScanLogic公司提供的驱动程序来开发应用程序很有帮助。在头文件slusb.h中含有如下函数原型:
BOOL FAR PASCAL CloseUsbDev(VOID); //关闭USB口
BOOL FAR PASCAL FindUsbDev(WORD wProd); //打开USB口
BOOL UsbVendorCmdRead(BYTE bCmd,WORD wValue,
WORD wIndex, WORD wLen, PVOID pData); //发送读控制指令
BOOL UsbVendorCmdWrite(BYTE bCmd, WORD wValue,
WORD wIndex, WORD wLen, PVOID pData); //发送写控制指令
BOOL UsbDataRead(DWORD n, PVOID pData); //读数据块
BOOL UsbDataWrite(DWORD n, PVOID pData); //写数据块
只要在应用程序中灵活用好以上几个函数,做一些简单的数据采集工作是完全可行的,笔者就是借用这几个函数在实际工作中成功完成了应用系统的开发。
文件devioctl.h包含有slusb.h中需要的常数和宏的定义。在文件usbtest.cpp中定义了控制SL11R操作的指令代码。
SL11R是一种功能强大的USB接口单片机,它的16位总线及DMA传输模式允许进行大容量数据的高速传输,可以进行高速数据采集。而且SL11R的编程简单,无需专用开发装置,开发成本低,初次接触USB的开发人员可以很容易实现应用系统的开发。