51单片机扩展USB接口的方法[1]

合集下载

51单片机总线扩展 io口扩展

51单片机总线扩展 io口扩展

(1)程序存储器地址空间 在一般情况下,在51单片机程序存储器的64KB地址 空间中,最低的4KB(0000H-0FFFH0)对于片内ROM和片外 ROM是公共的,而1000H——FFFFH的地址空间是片外ROM 专用。CPU专门提供一个控制信号/EA来区分片内片外ROM: 当/EA接高电平时,单片机从片内ROM的4KB地址空间取指 令,当地址超过0FFFH后,自动转向片外ROM取指令;当 /EA为低电平时,CPU只从片外ROM取指令。 (2)数据存储器地址空间 片内数据存储器地址是00H——FFH,片外数据存储器 地址范围是0000H ——FFFFH。 特别需要注意:64KB数据存储器RAM的地址空间和 64KB程序ROM的地址空间是重叠的,51单片机是通过不 同的信号还选通RAM和ROM:当由片外RAM读写数 据时,用读写信号/RD或者/WR来选通;当由片外ROM取 指令时,则采用选通信号/PSEN。
(2) 最后51单片机内部安排了21个特殊功能 寄存器,这里只列出P0、P1、P2、P3(带有”*” 表示寄存器是可以位寻址,这为51单片机的外部 存储器扩展带来了极大的方便)。
2:单片机的I/O口 51单片机有4个并行I/O 口,分别命名为P0、P1、P2、 P3,它们是特殊寄存器中的4个,每个I/O口即可以作输入, 也可以作输出。 下面分别按照功能介绍。
Flash简介
Flash介绍:
flash闪存是非易失存储器,可以对称为块的存储器单元块进行擦 写和再编程。 Intel于1988年首先开发出NOR Flash 技术,紧接着,1989年,东芝 公司发表了NAND Flash 结构。 NOR Flash 的特点是芯片内执行,这样应用程序可以直接在Flash闪 存内运行,不必再把代码读到系统RAM中。NOR 的传输效率很高,在 1~4MB的小容量时具有很高的成本效益。NAND的结构能提供极高的 单元密度,可以达到高存储密度。应用NAND的困难在于Flash的管理 和需要特殊的系统接口。通常NOR的速度比NAND稍快一些,而NAND 的写入速度比NOR快很多。闪存只是用来存储少量的代码,这时NOR 闪存更适合一些;而NAND则是高数据存储密度的理想解决方案。 NOR/ NAND Flash 比较 • 1 NOR的读速度比NAND稍快一些。 • 2 NAND的写入速度比NOR快很多。 • 3 NAND擦除速度远比NOR快。 • 4 NOR Flash上数据线和地址线是分开的;NAND Flash上数据线和地址 线是共用的 (所以单片机可以对NOR Flash扩展)。

51单片机与USB芯片PDIUSBD12接口固件程序

51单片机与USB芯片PDIUSBD12接口固件程序

51单片机与USB芯片PDIUSBD12接口固件程序关键词:USB固件程序此函数库可以直接使用PHILIPS的Demo驱动D12TEST以下只用了端点1进行控制传输,端点2的数据传输自己添加,没有使用DMA功能,为简单的固件程序/************************************************************* *************PHILIPS PDIUSBD12 FIRMWARECOPYRIGHT (c) 2005 BY JJJ.-- ALL RIGHTS RESERVED --File Name: D12_USB.hAuthor: Jiang Jian JunCreated: 2005/4/3Modified: NORevision: 1.0************************************************************** *************/#ifndef __D12_USB_H_REVISION_FIRST__#define __D12_USB_H_REVISION_FIRST__#include <REGX51.H>sbit SUSPEND = P3^5;#define D12_INT_ENDP0OUT 0x0001 //中断寄存器位定义#define D12_INT_ENDP0IN 0x0002#define D12_INT_ENDP1OUT 0x0004#define D12_INT_ENDP1IN 0x0008#define D12_INT_ENDP2OUT 0x0010#define D12_INT_ENDP2IN 0x0020#define D12_INT_BUSRESET 0x0040#define D12_INT_SUSPENDCHANGE 0x0080#define D12_INT_EOT 0x0100#define D12_SETUPPACKET 0x20 //读最后处理状态寄存器的设置信息包0010, 0000b#define EP0_PACKET_SIZE 16 //p0最大16byte#define USB_ENDPOINT_DIRECTION_MASK 0x80 //设备请求类型,传输方向D 7 1000,0000b#define USB_REQUEST_TYPE_MASK 0x30 //bmRequest的设置#define USB_REQUEST_MASK 0x0f#define USB_STANDARD_REQUEST 0x00 //5,6位的定义#define USB_VENDOR_REQUEST 0x20#define USB_DEVICE_DESCRIPTOR_TYPE 0x01 //描述符类型设备描述符01h,配置描述符02,接口描述符04,端点描述符05#define USB_CONFIGURATION_DESCRIPTOR_TYPE 0x02#define CONFIG_DESCRIPTOR_LENGTH 0x002E //配置描述符总长度//************************************************************ **************//Port And Macros And Structure And Union Definitions#define SWAP(x) ((((x) & 0x00FF) << 8) | (((x) >> 8) & 0x00FF)) //交换高低8位#define MSB(x) (((x) >> 8) & 0x00FF) //取数据高8位#define LSB(x) ((x) & 0x00FF) //取数据低8位typedef union _Event_Flags_ //定义USB事件标志数据类型{struct _Bit_Flags_{unsigned char Timer : 1; //定时器益出事件标记unsigned char BusReset : 1; //USB总线复位标志unsigned char Suspend : 1; //USB器件挂起标志unsigned char SetupPacket : 1; //收到SETUP包标志unsigned char RemoteWakeup : 1; //远程唤醒标志unsigned char InISR : 1; //USB中断服务标志unsigned char ControlState : 2; //控制端点处理状态//0:IDEL 空闲状态//1:TRANSMIT 数据发送状态//2:RECEIVE 数据接受状态unsigned char Configuration : 1; //配置标志(0:未配置;1:已配置) unsigned char Port1RxDone : 1; //端口1收到数据标志unsigned char Port2RxDone : 1; //端口2收到数据标志unsigned char Port1TxFull : 1; //端口1输出缓冲区满标志unsigned char Port2TxFull : 1; //端口2输出缓冲区满标志unsigned char Reserve : 3; //保留,未使用}Bits;unsigned short int Value;}EVENT_FLAGS; //事件标志数据类型typedef struct _DEVICE_REQUEST_{unsigned char bmRequestType; //请求类型unsigned char bRequest; //USB请求unsigned short wValue; //USB请求值unsigned short wIndex; //USB请求索引unsigned short wLength; //记数长度}DEVICE_REQUEST;#define MAX_CONTROLDATA_SIZE 8typedef struct _control_xfer{DEVICE_REQUEST DeviceRequest; //USB请求结构体unsigned short wLength; //传输数据的总字节数unsigned short wCount; //传输字节数统计unsigned char * pData; //传输数据指针unsigned char dataBuffer[MAX_CONTROLDATA_SIZE]; //请求的数据}CONTROL_XFER;static EVENT_FLAGS EventFlags; //定义为全局变量,用于与主程序的通信static CONTROL_XFER ControlData; //保存SETUP包请求类型和请求数据unsigned char idata EndPoint1Buffer[4]; //控制端点缓存unsigned char idata EndPoint2Buffer[64];//主端点缓存//************************************************************ **************//硬件提取层,多路地址/数据总线方式读写void Outportb(unsigned int Addr, unsigned char Data){*((unsigned char xdata *) Addr) = Data;}unsigned char Inportb(unsigned int Addr){return *((unsigned char xdata *) Addr);}void USB_Delay1ms(unsigned int count){unsigned int i,j;for(i=0;i<count;i++)for(j=0;j<120;j++);}//************************************************************ **************#define D12_DATA 0#define D12_COMMAND 1//PDIUSBD12命令接口函数void D12_SetMode(unsigned char bConfig,unsigned char bClkDiv){Outportb(D12_COMMAND,0xF3);Outportb(D12_DATA,bConfig);Outportb(D12_DATA,bClkDiv);}//设置端点void D12_SetEndpointStatus(unsigned char bEndp,unsigned char bStalled) {Outportb(D12_COMMAND,0x40+bEndp);Outportb(D12_DATA,bStalled);}//应答!!!!!void D12_AcknowledgeEndpoint(unsigned char endp){Outportb(D12_COMMAND,endp);Outportb(D12_COMMAND,0xF1);if(endp==0)Outportb(D12_COMMAND,0xF2);}//设置地址使能void D12_SetAddressEnable(unsigned char bAddress,unsigned char bEnable) {Outportb(D12_COMMAND,0xd0);if(bEnable) bAddress |= 0x80;Outportb(D12_DATA,bAddress);}//设置端点使能void D12_SetEndpointEnable(unsigned char bEnable){Outportb(D12_COMMAND,0xD8);if(bEnable)Outportb(D12_DATA,1);elseOutportb(D12_DATA,0);}//读中断寄存器unsigned short D12_ReadInterruptRegister(void){unsigned char b1;unsigned int j;Outportb(D12_COMMAND,0xF4);b1=Inportb(D12_DATA);j=Inportb(D12_DATA);j<<=8;j+=b1;return j;}//读取端点状态unsigned char D12_ReadEndpointStatus(unsigned char EndPoint){unsigned char BackValue;if(EventFlags.Bits.InISR == 0)EA = 0;Outportb(D12_COMMAND, 0x80 + EndPoint);//读取端点状态BackValue = Inportb(D12_DATA);if(EventFlags.Bits.InISR == 0)EA = 1;return BackValue;}//读端点最后处理状态unsigned char D12_ReadLastTransactionStatus(unsigned char bEndp){Outportb(D12_COMMAND,0x40+bEndp);return Inportb(D12_DATA);}//读端口unsigned char D12_ReadEndpoint(unsigned char endp,unsigned char len,un signed char *buf){unsigned char i,j;Outportb(D12_COMMAND,endp);if((Inportb(D12_DATA)&0xff)==0)//" define D12_FULLEMPTY as 0xFF by newerreturn 0;Outportb(D12_COMMAND,0x80+endp);i=Inportb(D12_DATA);i=i&0x60;Outportb(D12_COMMAND,0xF0);j=Inportb(D12_DATA);j=Inportb(D12_DATA);if(j>len)j=len;for(i=0;i<j;i++)*(buf+i)=Inportb(D12_DATA);Outportb(D12_COMMAND,0xF2);return j;}unsigned char D12_ReadEndpoint_Int(unsigned char endp,unsigned char le n,unsigned char *buf){unsigned char i,j;Outportb(D12_COMMAND,endp);if((Inportb(D12_DATA)&0xff)==0)//" define D12_FULLEMPTY as 0xFF by newerreturn 0;Outportb(D12_COMMAND,0x80+endp);i=Inportb(D12_DATA);i=i&0x60;Outportb(D12_COMMAND,0xF0);j=Inportb(D12_DATA);j=Inportb(D12_DATA);if(j>len)j=len;for(i=0;i<j;i++)*(buf+i)=Inportb(D12_DATA);Outportb(D12_COMMAND,0xF2);return j;}unsigned char D12_WriteEndpoint(unsigned char endp,unsigned char len,un signed char * buf){unsigned char i;Outportb(D12_COMMAND,endp);Inportb(D12_DATA);Outportb(D12_COMMAND,0xF0);Outportb(D12_DATA,0);Outportb(D12_DATA,len);for(i=0;i<len;i++)Outportb(D12_DATA,*(buf+i));Outportb(D12_COMMAND,0xFA);return len;}unsigned char D12_WriteEndpoint_Int(unsigned char endp,unsigned char le n,unsigned char * buf){unsigned char i;Outportb(D12_COMMAND,endp);Inportb(D12_DATA);Outportb(D12_COMMAND,0xF0);Outportb(D12_DATA,0);Outportb(D12_DATA,len);for(i=0;i<len;i++)Outportb(D12_DATA,*(buf+i));Outportb(D12_COMMAND,0xFA);return len;}void DisconnectUSB(void){D12_SetMode(0x02,0x03);//SET TO ONE? by newer}void InitialUSBInt(void);void ConnectUSB(void){EventFlags.Value = 0x0000;InitialUSBInt();D12_SetMode(0x16,0x03);}void ReconnectUSB(void){SUSPEND = 0;DisconnectUSB();USB_Delay1ms(1000);ConnectUSB();}//************************************************************ **************//中断服务程序void InitialUSBInt(void){IT1=0; //低电平中断触发EX1=1; //允许外部中断PX1=0; //优先级低EA =1;}void EP0_Out(void){unsigned char ep_last,i;ep_last=D12_ReadLastTransactionStatus(0);//interrupt symbolif(ep_last&D12_SETUPPACKET){ //recieved SETUP packet ---by newerControlData.wLength=0;ControlData.wCount=0;if(D12_ReadEndpoint_Int(0,sizeof(ControlData.DeviceRequest),(unsigned ch ar *)(&(ControlData.DeviceRequest)))!=sizeof(DEVICE_REQUEST)){D12_SetEndpointStatus(0,1);D12_SetEndpointStatus(1,1);EventFlags.Bits.ControlState=0; //should define USB_IDLE first --by newerreturn;}acket=1;EventFlags.Bits.ControlState=0; //by newer}else{if(ControlData.DeviceRequest.wLength>16)//最大传16byte{EventFlags.Bits.ControlState=0; //by newerD12_SetEndpointStatus(0,1);D12_SetEndpointStatus(1,1);}else{EventFlags.Bits.ControlState=2;//by newer}}}}else if(EventFlags.Bits.ControlState==2){i=D12_ReadEndpoint_Int(0,EP0_PACKET_SIZE,ControlData.dataBuffer+Con trolData.wCount);ControlData.wCount+=i;if(i!=EP0_PACKET_SIZE||ControlData.wCount>=ControlData.wLength){EventFlags.Bits.SetupPacket=1;EventFlags.Bits.ControlState=0;}}elseEventFlags.Bits.ControlState=0;}void EP0_In(void){short i=ControlData.wLength-ControlData.wCount;D12_ReadLastTransactionStatus(1);if(EventFlags.Bits.ControlState!=1) return;if(i>=EP0_PACKET_SIZE){D12_WriteEndpoint_Int(1,EP0_PACKET_SIZE,ControlData.pData+ControlDat a.wCount);ControlData.wCount+=EP0_PACKET_SIZE;EventFlags.Bits.ControlState=1;return;}if(i!=0){D12_WriteEndpoint_Int(1,i,ControlData.pData+ControlData.wCount);ControlData.wCount+=i;EventFlags.Bits.ControlState=0;return;}D12_WriteEndpoint_Int(1,0,0);EventFlags.Bits.ControlState=0;}void EP1_Out(void){unsigned char Length;D12_ReadLastTransactionStatus(2); /* Clear interrupt flag */Length = D12_ReadEndpoint_Int(2, sizeof(EndPoint1Buffer),EndPoint1Buffe r);if(Length != 0)EventFlags.Bits.Port1RxDone = 1;}void EP1_In(void){D12_ReadLastTransactionStatus(3);}void EP2_Out(void){unsigned char Length,EP2Status;D12_ReadLastTransactionStatus(4); /* Clear interrupt flag */EP2Status = D12_ReadEndpointStatus(4);EP2Status&=0x60;Length = D12_ReadEndpoint(4,sizeof(EndPoint2Buffer),EndPoint2Buffer); if(EP2Status==0x60)Length = D12_ReadEndpoint(4,sizeof(EndPoint2Buffer),EndPoint2Buffer); if(Length != 0)EventFlags.Bits.Port2RxDone = 1;}void EP2_In(void){D12_ReadLastTransactionStatus(5); /* Clear interrupt flag */}//************************************************************ **************//请求处理typedef struct _usb_device_descriptor{unsigned char bLength;unsigned char bDescriptorType;unsigned int bcdUSB;unsigned char bDeviceClass;unsigned char bDeviceSubClass;unsigned char bDeviceProtocol;unsigned char bMaxPacketSize0;unsigned int idVendor;unsigned int idProduct;unsigned int bcdDevice;unsigned char iManufacturer;unsigned char iProduct;unsigned char iSerialNumber;unsigned char bNumConfiguations;}USB_DEVICE_DESCRIPTOR;code USB_DEVICE_DESCRIPTOR DeviceDescr={sizeof(USB_DEVICE_DESCRIPTOR),0x01,//USB_DEVICE_DESCRIPTOR_TYPE,SWAP(0x0100),0xDC,//USB_CLASS_CODE_TEST_CLASS_DEVICE,0, 0,EP0_PACKET_SIZE,SWAP(0x0471),SWAP(0x0666),SWAP(0x0100),0, 0, 0,25};//配置描述符typedef struct _usb_configuration_descriptor{unsigned char bLength[0x2e];}USB_CONFIGURATION_DESCRIPTOR;code USB_CONFIGURATION_DESCRIPTOR ConfigDescr={0x09,0x02,0x2e,0x00,0x01,0x01,0x00,0xa0,0x32,0x09,0x04,0x00,0x00,0x04,0xdc,0xa0,0xb0,0x00,0x07,0x05,0x81,0x03,0x02,0x00,0x0a,0x07,0x05,0x01,0x03,0x02,0x00,0x0a,0x07,0x05,0x82,0x02,0x40,0x00,0x0a,0x07,0x05,0x02,0x02,0x40,0x00,0x0a};//code_tramsitvoid code_transmit(unsigned char code *pRomData,unsigned short len) {ControlData.wCount=0;if(ControlData.wLength>len)ControlData.wLength=len;ControlData.pData=pRomData;if(ControlData.wLength>=EP0_PACKET_SIZE)D12_WriteEndpoint(1,EP0_PACKET_SIZE,ControlData.pData);ControlData.wCount+=EP0_PACKET_SIZE;EA = 0;EventFlags.Bits.ControlState=1;EA = 1;}else{D12_WriteEndpoint(1,ControlData.wLength,pRomData);ControlData.wCount+=ControlData.wLength;EA = 0;EventFlags.Bits.ControlState=0;EA = 1;}}//获取描述符void get_descriptor(void){if(MSB(ControlData.DeviceRequest.wValue)==USB_DEVICE_DESCRIPTOR_T YPE){code_transmit((unsigned char code*)&DeviceDescr,sizeof(USB_DEVICE_DE SCRIPTOR));return;}if(MSB(ControlData.DeviceRequest.wValue)==USB_CONFIGURATION_DESCR IPTOR_TYPE){if(ControlData.DeviceRequest.wLength>CONFIG_DESCRIPTOR_LENGTH)ControlData.DeviceRequest.wLength=CONFIG_DESCRIPTOR_LENGTH;//标识符总大小2E byte,第二次请求时wlength=0x00ff}//这里的ConfigDescr其实应该包括其他标识符!code_transmit((unsigned char code*)&ConfigDescr,ControlData.DeviceRequ est.wLength);return;}}//single transmitvoid single_transmit(unsigned char *buf,unsigned char len){if(len<=EP0_PACKET_SIZE){D12_WriteEndpoint(1,len,buf);}}//设置地址void set_address(void){D12_SetAddressEnable((unsigned char)(ControlData.DeviceRequest.wValue &0xff),1);//比如wValue是"02 00" 应该得到02single_transmit(0,0);}//设置配置void set_configuration(void){if(ControlData.DeviceRequest.wValue==0){single_transmit(0,0);EventFlags.Bits.Configuration=0;D12_SetEndpointEnable(0);}else if(ControlData.DeviceRequest.wValue==1){single_transmit(0,0);D12_SetEndpointEnable(0);D12_SetEndpointEnable(1);EventFlags.Bits.Configuration=1;}}//读取配置void get_configuration(void){unsigned char c=EventFlags.Bits.Configuration;single_transmit(&c,1);}//读取设备接口信息void get_interface(void){unsigned char txdat=0;single_transmit(&txdat,1);}static code void (*StandardDeviceRequest[])(void)= {0,0,0,0,0,set_address,get_descriptor,0,get_configuration,set_configuration,get_interface,0,0,0,0,0};static code void (*VendorDeviceRequest[])(void)={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};void ControlHandler(void){unsigned char type,req;type=ControlData.DeviceRequest.bmRequestType&USB_REQUEST_TYPE_MA SK;//0011,0000breq=ControlData.DeviceRequest.bRequest&USB_REQUEST_MASK;//0000,11 11bif(type==USB_STANDARD_REQUEST)(*StandardDeviceRequest[req])();else if(type==USB_VENDOR_REQUEST)(*VendorDeviceRequest[req])();}void USB_ISR(void) interrupt 2{unsigned int i_st;EA = 0;EventFlags.Bits.InISR=1;i_st=D12_ReadInterruptRegister();if(i_st!=0){if(i_st&D12_INT_ENDP0OUT)EP0_Out();if(i_st&D12_INT_ENDP0IN)EP0_In();if(i_st&D12_INT_ENDP1OUT)EP1_Out();if(i_st&D12_INT_ENDP1IN)EP1_In();if(i_st&D12_INT_ENDP2OUT)EP2_Out();if(i_st&D12_INT_ENDP2IN)EP2_In();}EventFlags.Bits.InISR=0;EA = 1;}//************************************************************ **************#endif//简单主程序文件,自己按需要改写#include <REGX51.H>#include "D12_USB.h"extern EVENT_FLAGS EventFlags; //事件信号extern unsigned char idata EndPoint1Buffer[4];main(){ReconnectUSB();while(1){if(EventFlags.Bits.SetupPacket){EA = 0;EventFlags.Bits.SetupPacket = 0; ControlHandler();EA = 1;}if(EventFlags.Bits.Timer){EventFlags.Bits.Timer = 0;}if(EventFlags.Bits.Port1RxDone){EventFlags.Bits.Port1RxDone = 0; }}}那么可以写5个函数:void print();void copy();void delete();void quit();void help();然后用一个函数指针数组把他们存在一起:void (*p[])() = {print, copy, delete, quit, help}; 然后根据用户入0,1,2,3,4来直接叫函数cin >> index;p[index]();。

51单片机的扩展

51单片机的扩展

(a)程序存储器的扩展
.程序存储器的作用----存放程序代码或常数表格
.扩展时所用芯片----一般用只读型存储器芯片(可以是 EPROM、E2PROM、 FLASH芯片等)。 .扩展电路连接 ---- 用EPROM 2732扩展程序存储器。 .存储器地址分析----究竟单片机输出什么地址值时,可以
一、系统扩展的含义
单片机中虽然已经集成了CPU、I/O口、定时器、 中断系统、存储器等计算机的基本部件(即系统资 源),但是对一些较复杂应用系统来说有时感到以 上资源中的一种或几种不够用,这就需要在单片机 芯片外加相应的芯片、电路,使得有关功能得以扩 充,我们称为系统扩展(即系统资源的扩充)。 需要解决的问题是单片机与相应芯片的接口电 路连接(即地址总线、数据总线、控制总线的连接) 与编程。
指向存储器中的某一单元。
.扩展时所用芯片
2732----4K EPROM
A7 A6 A5 A4 A3 A2 A1 A0 O0 O1 O2 GND Vcc A8 A9 A11 OE/Vpp A10 CE O7 O6 O5 O4 O3
2732引脚功能
A0-A11 CE 地址线 选片 输出允许/ 编程电源 数据线
P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7
A8 A9 A10 A11
2732
CE OE
ALE
PSEN 图4.2 扩展电路
8031
2732
数据总线的连接: P0.0-P0.7(数据总线)----------------------------------------O0-O7 地址总线的连接: 经过锁存器373 P0.0-P0.7(地址总线低8位)---------------------------------- A0-A7 P2.0-P2.3(地址总线高8位中的4位)--------------------------- A8-A11 控制总线的连接: PSEN(程序存储器允许,即读指令) -------------------------- OE ALE(地址锁存允许)-------------------------------------接373的使能端 G

51单片机 USB 接口通信 方案

51单片机 USB 接口通信 方案

************************************************************************************************************ ************************************************************************************************************51单片机 USB 接口通信 方案 单片机现在单片机都是串口连接的,连接不方便,也显的比较老。

如果购买转接线,成本又不能控制。

其实单片机和电脑之间完全可以建立 USB 连接,只需要通过一片 USB 转串口的芯片 如图,我昨天刚实验过,效果不错~ 电路也比较简单,只需要四个电容一个晶振即可。

唯一麻烦一些的是芯片是 SSOP-20封装的,很小,如果是上洞洞板需要 转接一下。

大家可以实验下,3,4口出来的就是 TTL 的信号,可以直接和单片机的 P30,P31口连接,进行串口通信~,不需要 MAX232 转换。

(如果是转成电脑串口则需要 MAX232)注:另外也可以用 PL2303芯片构建~~但有的资料说 PL2303比较合适3.3V 系统,所以我用了这个 CH340的 [此贴子已经被作者于2009-9-25 13:13:16编辑过]不错。

不过我还是建议用 cp2102。

楼上的片子是国产的, 不知道供货和稳定性。

另外建议玩单片机的放弃 pl2303,虽然便宜, 但是很不稳定 cp2102据说不太好焊接,所以我没选(虽然这个也不太好焊接~)为什么不搞个 DIP 封装的呢~ cp2102好像是不需要外接晶振的,这个是个优点。

爱好者玩玩的基本也不需要考虑供货问题,TAOBAO 上有人在卖一直在用 PL2303HX附件cp2101接线图 接线图.gif (9.29 KB) 接线图 2010-9-9 17:13不错啊。

51单片机接口的扩展

51单片机接口的扩展
4.3 输入/输出接口扩展
• MCS-51系列单片机内部有4个双向的8位并行I/O端 口:P0、P1、P2和P3口。
• 在实际的应用系统中,P0口分时地作为低8位地址 线和数据线,P2口作为高8位地址线。这时,P0口 和部分或全部的P2口无法再作通用I/O口。
• P3口的一些口线首先要满足第二功能的要求。这 时就需要进行单片机I/O口的扩展。 常用的I/O扩展有以下两种形式:
B
14位
定时
计数器
C
PA0~PA7 PB0~PB7
PC0~PC7
VCC(+5 V) VSS(GND)
8155的引脚封装图
8155的内部接口图
1. 8155的内部结构
• 8155各引脚的功能为: ➢ 地址/数据线AD0~AD7(8条):是低8位地址线和数据线
的共用输入总线,常和MCS-51单片机的P0口相连,用于 分时传送地址和数据; ➢ PA0~PA7、PB0~PB7:为A、B口线,用于和外设之间传 递数据; ➢ PC0~PC5为C端口线,既可与外设传送数据,也可以作为 A、B口的控制联络线; ➢ CS:片选线,低电平有效。
39 38 37 36 35 34 33 32
R ESET
INT0 INT1 T0 T1
P1. 0
P2. 0
P2. 1
MCS-51
P2. 2 P2. 3
P2. 4
P2. 5
P2. 6
P2. 7
21 22 23 24 25 26 27 28
P1. 1 P1. 2 P1. 3 P1. 4 P1. 5 P1. 6 P1. 7
RD WR PSEN ALE/ P TXD RXD
17 16 29 30 11 10

基于单片机控制的扩展USB接口对U盘的读写

基于单片机控制的扩展USB接口对U盘的读写

目录摘要....................................................................................... 错误!未定义书签。

Abstract ................................................................................. 错误!未定义书签。

符号说明............................................................................... 错误!未定义书签。

第1章硬件设计 (1)1.1 硬件概述 (1)第2章U盘的逻辑结构 (2)2.1 U盘的逻辑结构 (2)第3章USB通信协议 (3)3.1 USB设备开工的机理 (3)3.2 USB描述符 (3)3.3 USB设备的枚举过程(开工过程) (4)3.4 USB1.1协议 (6)3.4.1 重新认识枚举过程 (7)3.4.2 基于SL811的USB底层传输函数实现要点 (9)3.4.3 usbXfer()函数 (10)3.4.4 ep0Xfer()函数 (20)3.5 块传输(Bulk) (22)3.6 SCSI命令 (24)3.6.1 跟U盘初始化有关的SCSI命令 (24)3.6.2 Read和Write U盘的命令 (27)3.7 U盘兼容性问题的探讨 (29)第4章微软的文件系统 (34)4.1 FAT16文件系统简介 (34)4.1.1 保留区 (34)4.1.2 FAT区 (37)4.1.3 根文件夹 (40)4.1.4 数据区 (40)4.2 FAT32文件系统简介 (40)4.3 FAT文件系统的局限性 (41)第5章编码实例分析 (42)5.1 需求简述 (42)5.2 文件结构 (42)5.3 Main.c (42)5.4 USB.c (43)5.5 timer.c (44)5.6 filesys.c (44)5.6.1 变量说明 (44)5.6.2 扇区读写函数 (44)5.6.3 询问下一簇号函数 (45)5.6.4 FAT初始化函数(BPB信息分析) (45)5.6.5 Open Files (47)5.6.6 创建文件 (50)5.6.7 写入文件 (51)第6章使用CH375的解决方案 (52)6.1 只作简单介绍 (52)结论 (53)参考文献 (54)致谢 (55)第1章硬件设计1.1硬件概述先详细介绍基于Cypress公司的SL811芯片的扩展方案,基于国内南京沁恒电子的CH375芯片的方案最后介绍。

51单片机外部存储器的扩展

51单片机外部存储器的扩展
由p0口提此口是双向输入mcs51系统扩展的实现外部总线的扩展程序存储器的扩展程序存储器的扩展数据存储器的扩展存储器的扩展通常微机的cpu外部都有单独的并行地址总线数据总线控制总线
8051单片机的总线扩展
系统扩展概述
最小应用系统 单片机系统的扩展是以基本的最小系统为 基础的, 故应首先熟悉最小应用系统的结构。 实 际 上 , 内 部 带 有 程 序 存 储 器 的 8051 或 8751单片机本身就是一个最简单的最小应用系 统,许多实际应用系统就是用这种成本低和体 积小的单片结构实现了高性能的控制。 对于内部无程序存储器的芯片8031来说, 则 要用外接程序存储器的方法才能构成一个最小 应用系统。
MCS-51存储器的扩展
MCS-51系列单片机片外数据存储器的空间可 达64KB,而片内数据存储器的空间只有128B或 256B。如果片内的数据存储器不够用时,则需进 行数据存储器的扩展。
MCS-51系列单片机片内外程序存储器的空 间可达64KB,而片内程序存储器的空间只有 4KB。如果片内的程序存储器不够用时,则需 进行程序存储器的扩展。
MCS-51存储器的扩展
存储器扩展的核心问题是存储器的编址 问题。所谓编址就是给存储单元分配地址。 由于存储器通常由多个芯片组成,为此 存储器的编址分为两个层次: 即存储器芯片的选择和存储器芯片内部 存储单元的选择。
一、地址线的译码
存储器芯片的选择有两种方法:线选法和译码法。 1、线选法。所谓线选法,就是直接以系统的地址线作为 存储器芯片的片选信号,为此只需把用到的地址线与存储 器芯片的片选端直接相连即可。 2、译码法。所谓译码法,就是使用地址译码器对系统的 片外地址进行译码,以其译码输出作为存储器芯片的片选 信号。译码法又分为完全译码和部分译码两种。 (1)完全译码。地址译码器使用了全部地址线,地址与存储 单元一一对应,也就是1个存储单元只占用1个唯一的地址。

在单片机上扩展USB 接口的设计与实现

在单片机上扩展USB 接口的设计与实现

第13卷 第3期 计算机辅助工程 Vol.13,No.3 2004年9月 COMPUTER AIDED ENGINEERING Sep.,2004原稿收到日期:2004-02-09;修改稿收到日期:2004-07-06.作者简介: 李庆超(1953-),男,河南新乡人,副教授,主要研究领域为计算机控制和数据库应用等. 邢文生(1969-),男,河南新乡人,讲师,硕士,主要研究领域为计算机控制.在单片机上扩展USB 接口的设计与实现李庆超,邢文生(焦作大学计算机工程系,焦作,454003) (E-mail: jsjx@ )摘 要: 本文介绍一种基于SL811HS 的单片机读写U 盘的系统。

系统由单片机、USB 接口控制器、高速RAM 等设备组成,解决了多数数据采集设备、工控机及嵌入式系统没有安装USB 标准接口,不能读写U 盘的问题。

重点分析系统的原理及传输协议,给出了硬件、软件的实现方法。

关键词: SL811HS;单片机;移动存储;USB 接口Design of USB Interface Based on MCU and Its RealizationLI Qing-chao ,XING Wen-sheng(Department of Computer Engineering, Jiaozuo University, Hehan , Jiaozuo ,454003)Abstract This paper introduces a system of MCU Read & Write Udisk based on SL811HS. This system is composed of MCU, USB interface control unit and high-speed RAM, solving the problem of USB standard interfaces being uninstalled in most data collection equipment, work controller and built-in system and Udisk not being read and written. It emphasizes the analysis of the principle of the system and communication protocol, and presents the method of realizing the hardware and software.Key words SL811HS; MCU; mobile storage; USB interface1 引 言目前,在工控机、嵌入式系统中,数据采集和交换大多使用软盘、串行接口和以太网等方式。

如何扩展51单片机的串行口?

如何扩展51单片机的串行口?

在以单片机为核心的多级分布式系统中,常常需要扩展单片机的串行通信口,本文分别介绍了基于SP2538专用串行口扩展芯片及Intel8251的两种串行口扩展方法,并给出了实际的硬件电路原理及相应的通信程序段。

关键词:串口扩展;单片机;SP2538;Intel82511 引言在研究采场瓦斯积聚模拟试验台的过程中,笔者设计了主从式多机采控系统结构。

主从式多机控制系统是实时控制系统中较为普遍的结构形式,它具有可靠性高,结构灵活等优点。

当选用单串口51单片机构成这种主从式多机系统时,51单片机一方面可能要和主机Computer通信,一方面又要和下位机通信,这时就需要扩展串行通道。

本文具体介绍了两种串行通道的扩展方法。

2 串行口的扩展方法常用的标准51单片机内部仅含有一个可编程的全双工串行通信接口,具有UART的全部功能。

该接口电路不仅能同时进行数据的发送和接收,也可作为一个同步移位寄存器使用。

当以此类型单片机构成分布式多级应用系统时,器件本身的串口资源就不够用了。

笔者在实际开发中,查阅了有关资料,总结出如下两种常用而有效的串行通道扩展方法。

2.1 基于SP2538的扩展方法SP2538是专用低功耗串行口扩展芯片,该芯片主要是为解决当前基于UART串口通信的外围智能模块及器件较多,而单片机或DSP原有的UART串口又过少的问题而推出的。

利用该器件可将现有单片机或DSP 的单串口扩展至5个全双工串口。

使用方法简单、高效。

在应用SP2538扩展串行通道时,母串口波特率K1=2880*Fosc_in,单位是MHz,且Fosc_in小于20.0MHz 在SP2538输入时钟Fosc_in =20.0MHz时母串口可自适应上位机的56000bps和57600bps两种标准波特率输入。

子串口波特率K2=480*Fosc_in。

母串口和所有子串口都是TTL电平接口,可直接匹配其他单片机或TTL数字电路,如需连接PC机则必须增加电平转换芯片如MAX202 、MAX232 等。

自制简单方便的51avr单片机USB+ISP+下载线

自制简单方便的51avr单片机USB+ISP+下载线

自制简单方便的51avr单片机USB ISP 下载线(硬件部分)文章发表于:2009-05-24 11:05?如今呢是使用笔记本的人越来越多了,可是呢买了笔记本对于学习很多单片机比如说51或者AVR就不方便了。

因为大多数电脑都不带串并口了。

但是呢新出的笔记本上的USB接口是足够用的。

因而都想用US B转了串口或者并口就能方便单片机学习开发时的ISP编程或者JTAG仿真了。

其实很多单片机开发商和销售商都早就有了USBisp的配套软件和硬件了的,只不过都比较昂贵,而且技术资料多是保密的,对于自己小本学习单片机的人而言不免都希望能与价廉物美的USBISP烧写器,而且也多想自己动手做一个了。

网上公开的比较流行的支持51和AVR的烧写器是用ATMEL公司的MAGE8单片机做的,其机理也就是通过软件编程的方式将USB接口信号转换为并口信号以实现ISP的。

其原理图如下图:使用的是个名叫PROGISP的软件,我收集了制作的相关资料在压缩包中,有兴趣的朋友可以看看或者尝试一下。

但是呢我在这里主要并不是向大家介绍这个MAGE8做的USBISP下载线,因为它的编程软件很强大但是配置太灵活了,对于初学者,很容易配错相关设置,比如AVR的融丝位,弄不好可能将你的AVR单片机锁死了。

而且烧入MAGE8的固件有可能不支持51或AVR,找固件比较麻烦。

我要向大家推荐的另一种方案是用专门的USB转串口的USB芯片。

利用它制作一个USBISP下载线,而且支持51和AVR系列的单片机,功能算比较强的,电路也并不比MAGE8做的USBISP下载线难多少,只需要在主芯片外接晶振和几个电容电阻就是了。

这个方案就是利用国产的南京沁恒公司的CH341A芯片将USB转为并口直接实现ISP编程。

可以去南京沁恒公司网页申请到免费样片(注意要做USB下载线一定要申请CH341A,填写申请表时后缀字母A不能写错了)其电路图如下图:?PCB图如下自己买来元器件后很快就可以焊好了的,当然为了保证稳定工作要注意必须给单片机单独供电而且其接地和CH341的USB电源的地必须公地。

单片机与USB接口技术及通信原理

单片机与USB接口技术及通信原理

单片机与USB接口技术及通信原理在当今信息时代,单片机与USB接口技术及通信原理的研究和应用变得越来越重要。

单片机作为一种集成电路,是计算机技术的基础之一,而USB接口技术则是现代计算机外部设备的标准接口之一。

本文将介绍单片机与USB接口技术的相关原理,探讨其通信原理及应用。

首先,我们来了解一下单片机的概念和特点。

单片机是一种封装了中央处理器、内存和外设接口等功能的集成电路芯片。

它具有体积小、功耗低、可编程性强等特点,广泛应用于各个领域,如工业控制、家电控制、汽车电子等。

单片机的核心是中央处理器,它通过控制和执行指令来完成各种功能。

单片机还可以通过外部接口与其他设备进行通信,实现数据交互。

USB(Universal Serial Bus)是一种通用的串行总线,它是现代计算机与外部设备进行连接的标准接口。

USB接口具有简单、方便、可扩展等特点,成为各类计算机外设设备的主要接口标准。

USB接口通常包括主机(Host)和设备(Device)两个角色,主机负责控制和管理设备,设备则通过接口与主机进行通信。

USB接口有多种不同的版本和类型,如USB2.0、USB3.0、Micro USB、Type-C等。

单片机与USB接口技术的结合,可以实现单片机与电脑、手机等设备之间的高速数据传输和通信。

在实际应用中,通常需要使用USB-to-Serial转换芯片,将单片机的串口信号转换为USB信号,以便与计算机等设备进行通信。

通过USB接口,单片机可以与上位机进行数据的读取和上传,实现数据采集、控制和远程监控等功能。

在单片机与USB接口通信中,需要了解USB通信的基本原理。

USB通信是基于主机和设备之间的数据传输,其中包括控制传输、批量传输、中断传输和同步传输四种传输方式。

控制传输用于配置和管理USB设备,批量传输用于大数据块的传输,中断传输用于低延时数据的传输,同步传输用于实时音频或视频数据的传输。

USB通信采用的是主从式的通信协议,主机负责控制和管理通信的流程和状态。

51系列单片机的串口扩展方案

51系列单片机的串口扩展方案
第7 第5 卷 期
2 0 年 5月 08
软 件 导 刊
So t r fwa eGu d ie
VOl o5 _ N . 7
Ma 0 8 v2 0
5 系列单片机 的 串 口扩展 方案 1
鲍 梦. 刘智 萍
( 西蓝 天 学院瑶 湖校 区公教 部计 算机教 研 室 , 西 南昌 3 09 ) 江 江 3 0 8
配上 2 S2 3就 可 以扩展 到6 串 口。 片 P38 个 S 2 3 每 个 子 串 1 波 特 率 都 可 以 达 到 9 0 b sS 2 3 P 38 3的 6 0 p .P 3 8
新 的全双 工 串行 口。S 2 3 适用 于 1 起 始位 、个 数据 位 、个 P 38 个 8 1
的母 串 口相 连 的 单 片 机 串 口的 波 特 率 达 到 3 8 0 b s 8 4 0 p ,若 单 片 机 采 用 非 1 .5 2 1 9 M的 工 作 晶 振 ,则 波 特 率 会 有 偏 差 ,不 过 , 0 S 2 3 允 许 波 特 率 误 差 为 25 P38 . %
0D 、 时指 令0 0 。向R ~ X3 的任 意 1 接 收端 口写任 x5延 x0 XO R 中 个
意 数 据 即 可 将 S 2 3 唤 醒 。 但 由 于 S 2 3 的 唤 醒 时 间 需 要 P 38 P 38 2ms 右 ,故 用 于 芯 片 唤 醒 的 数 据 将 不 会 被 主 机 接 收 。 因此 , 5 左 可 以先 发 送 1 字 节 数 据 用 于 唤 醒 芯 片 , 时 2 m 后 即 可 进 行 个 延 5s
与 子 串 口波特 率 的关 系如下 :
K子 = 8 * o c. 4 0Fs
因此 , 如果 子 串 口采用 9 o 波 特率 , 据 以上 公 式 ,oc 60 根 F s= 2 MH , 0 z 而母 串 1 的波特 率必 须达 到3 8 0 b s 3 84 0 p 。这 样 与S 2 3 P 38

单片机与USB接口设计

单片机与USB接口设计

单片机与USB接口设计摘要:51系列芯片的串口通信速率较低,会在其串口通信中形成一个速度瓶颈。

通用串行总线(USB)作为一种新的微机总线接口规范,具有便捷、易扩展、低成本、低干扰等特点,非常适合作为主机和外设之间的通信接口。

本文介绍了一种比较简单方便设计USB设备的方法,设计采用51单片机和USB接口芯片组成的单片机最小系统来实现一个完整的USB设备,大大提高了通信速率。

在设计中,采用的控制器是51单片机AT89S52,USB电气接口则是PHILIPS公司的USB接口芯片PDIUSBD12。

单片机控制器作为下位机,通过USB电气接口芯片和USB总线与PC机交换数据,并实现USB设备的逻辑功能。

系统开发的最终硬件成果是一个带有USB接口的设备,通过USB 电缆与PC机相连接,能够实现主机对设备的列举,以及和PC机交换数据,并实现其扩展功能。

关键词:USB;单片机系统;PDIUSBD12;AT89S52;接口技术USB interface in the design of communicationAbstract:The communication rate of the series 51 chip is lower and it forms a tare bottle neck in serial communication. This paper introduced a simple and convenient method to design a USB apparatus, that is to say, to realize an intact USB apparatus with a minimum system of single-chip computer that made of 51 single-chip computer and USB interface, the circuit greatly improves communication rate. In this system, I adopted 51 one-chip computers AT89S52 as its controller, the chip PDIUSBD12 of PHILIPS Company as its electric interface. The one-chip computer as the next machine, exchanges the data with the PC, through the USB bus and USB electric interface chip, and it realizes the logic function of USB apparatus. It can exchange data with PC, and realize its expanding function, through connecting with PC.Key words:single-chip computer system;interface technology;PDIUSBD12;AT89S52;USB0 引 言USB 是英文UniversalSerialBus 的缩写,中文含义是“通用串行总线”。

基于C51单片机的USB接口课程设计

基于C51单片机的USB接口课程设计

摘要:本课程设计实现具有按键输入、数据储存、数据通信等功能的单片机系统。

该系统基于C51单片机的USB接口设计,该系统由最小C51单片机系统、USB接口模块组成。

系统实现按键输入数据保存至E2PROM后,可通过USB接口传送至上位机功能。

通过对系统的仿真及实物调试,完成了系统设计,实现了课程设计的要求。

关键字:USB,数据通信,单片机,按键输入,E2PROMAbstract:This course designs the single slice of machine system that the realization has a keystroke, the data functions, such as storage and data correspondence...etc..That system connects a people's design according to USB of C51 single slice of machine, that system from the minimum C51 single slice of machine system, and USB pick up a people mold piece constitute.The system carries out a keystroke data to keep to E2 PROMs, can connect a highest of a people's transmission through USB machine function.Passing is true to imitating of system and the real object adjust to try, completed a system design and carried out the request of course design.Key words:USB, data correspondence, single slice of machine, keystroke, E2PROM目录前言 (1)1.总体设计方案 (2)1.1接口设计方案 (2)1.1.1独立模式即(USB接口芯片外接C51芯片) (2)1.1.2 USB接口芯片集成了MCU (2)1.2系统设计方案 (2)2.系统设计原理 (3)2.1 USB接口简介 (3)2.2 I2C总线简介 (3)3.单元模块设计 (4)3.1 USB硬件电路设计 (4)3.1.1电源电路模块 (4)3.1.2单片机最小系统模块 (5)3.1.3 E2PROM模块: (6)3.1.4 USB接口模块 (7)3.2 USB软件设计 (9)3.2.1主程序介绍: (9)3.2.2 E2PROM写程序: (10)3.2.3 E2PROM读程序: (13)3.2.4 USB接口程序 (14)4.系统功能调试 (15)4.1调试用的软件简介: (15)4.2模块调试过程及结果: (15)5.设计总结 (18)6.参考文献 (19)前言USB是英文Universal Serial BUS的缩写,中文含义是“通用串行总线”。

基于51单片机和PDIUSB12的USB接口设计

基于51单片机和PDIUSB12的USB接口设计

基于51单片机和PDIUSB12的USB接口设计张学峰;陈瑾;翟从鸿;彭文超;朱家俊【摘要】为解决51单片机与计算机的串行总线(USB)的通信问题,以PDIUSB 12芯片为基础,选择51单片机中的STC89C52为示例,设计了一款USB的接口电路,解决了多款51单片机与计算机的USB通信困难的问题.【期刊名称】《微型机与应用》【年(卷),期】2015(034)006【总页数】4页(P16-18,22)【关键词】USB;STC89C52;PDIUSB12;通信【作者】张学峰;陈瑾;翟从鸿;彭文超;朱家俊【作者单位】安徽师范大学物电学院,安徽芜湖241000;安徽师范大学物电学院,安徽芜湖241000;安徽师范大学物电学院,安徽芜湖241000;安徽师范大学物电学院,安徽芜湖241000;安徽师范大学物电学院,安徽芜湖241000【正文语种】中文【中图分类】TN919.5USB因其使用方便、传输速度快、连接灵活而受到用户和计算机厂商的广泛青睐。

微控制器(MCU)在与计算机实现通信时大多依靠USB来实现。

在 MCU中,51单片机是国内使用最广的单片机之一,但是由于多款51单片机无法直接与计算机实现USB通信,而给许多用户开发和使用带来不便。

本文以51单片机中的典型代表STC89C52和恩智浦半导体公司的PDIUSB12为基础设计的USB接口电路,解决了MCU和计算机的USB通信问题。

本方案具有价格便宜、使用简单、无需编写复杂的USB驱动程序、即插即用等优点。

1.1 芯片简介本系统以单片机 STC89C52和 PDIUSB12接口芯片为基础而搭建。

STC89C52是STC公司生产的一种低功耗、高性能 8位 CMOS微处理器,具有经典的 MCS-51内核,主要有以下功能特点:拥有灵活的8 KB Flash程序存储器和512 B RAM 数据存储器,并含有32位I/O口和内置的4 KB EEPROM,3个16位定时器/计数器,4个外部中断,一个7向量4级中断结构,全双工串行口;掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止;最高运作频率35 MHz,是一种常用性价比较高的MCU。

51单片机扩展USB接口的方法

51单片机扩展USB接口的方法

分别是 @ 其中 @ > R D : > H "到@ > R D : > H # ) > R D : > H " 是 0 字节双 < < < 向控制 X , , G X Z, @ > R D : > H % @ > R D : > H . @ > R D : > H (为 # -字节发 < < < 送X , , G X Z, @ > R D : > H ! @ > R D : > H @ > R D : > H #为# -字节接收 < < <
请求类型 ( )请求 ( )数值 ( )指针 ( )长度 ( ) % M H @ % M H @ ! M H @ ! M H @ ! M H @ P P P P P 数据 M E 2 @ C @ = H 7 @ M 2 @ C @ = H Q L B ; C @ Q G > R @ S Q T @ > H 9 F P < F U
L D ; ) ! %4 D ) ! 8 A ) ! " " # <
( % 单片机扩展 * + , 接口的方法
!, ! 翟子楠%, 王彦辉%,
( 河南科技大学, 河南 洛阳 ; 平顶山学院, 河南 平顶山 ) % ) & % " " . ! ) # & " " !
摘 要: 讨论了在 / 介绍了 * 详细描述 0 ’ 1 ( % 2 3 单片机上扩展 * + , 接口的方法) + , 的相关技术标准)
L ’ ’ &年
来自于 ! " # 主机, ! " # 设备根据主机的请求提供相应的描 述符, 采用中断传送过程, 当! 单 " # $ % & ’ ( 发出中断请求, 片机响应中断, 查看 ! 找出产生 " # $ % & ’ (的各中断寄存器, 中断的事件, 然后处理) 中断事件主要有: 接收事件, 发送事 件, 复位事件, 唤醒事件, 挂起事件, 停止应答事件等) 片内 的主程序的任务 为 初 始 化 * 初始化 + % , .与 ! " # $ % & ’ ( )

基于51单片机的USB接口应用设计

基于51单片机的USB接口应用设计

基于51单片机的USB接口应用设计郭辛;陈燕;杨艳【摘要】In this paper, the USB connector circuit driver unit and the driver software were designed by using CH372 chip as the key component based on MCS-51 single -chip microcomputer (SCM), and the Dynamic Link Library (DLL) technology, completing the test between the host machine and SCM system through the USB connector. The results proved that, the host data can be exchanged under the speed rate of 1Mbps, and the high efficiency driver chip and communicational SCM system could be used for data exchange once exceeding the limit.%基于MCS-51单片机系统,以CH372芯片为核心,设计出了USB接口单元电路和驱动程序。

并以PC机为宿主机,通过USB接口,利用动态链接库技术完成了PC机与单片机系统间的传输测试。

研究表明:在低于1Mbps速率下,能成功实现微机和单片机之间的数据交换,对于较高速率的传输方式,应采用更高效的驱动芯片或通信类专用单片机系统完成并实现微机和单片机之间的数据交换。

【期刊名称】《绵阳师范学院学报》【年(卷),期】2012(031)011【总页数】4页(P37-40)【关键词】CH372芯片;USB接口;驱动程序【作者】郭辛;陈燕;杨艳【作者单位】绵阳师范学院物理与电子工程学院,四川绵阳621000;绵阳师范学院物理与电子工程学院,四川绵阳621000;绵阳师范学院物理与电子工程学院,四川绵阳621000【正文语种】中文【中图分类】TP311.10 引言随着USB接口技术在计算机上的广泛应用,USB通信方案将在控制领域显示越来越重要的作用和广阔的发展空间,并随着电子技术和计算机技术的飞速发展,USB 技术在PC机上的应用越来越广泛,传统的鼠标、打印机接口已逐步被更为便捷的USB口所取代;而单片机由于自身功能局限,USB技术在单片机系统(SCM)中的使用受到了局限,尤其在工业控制领域数据通信仍沿用传统的串口通讯方案。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

收稿日期:2006-01-07作者简介:翟子楠(1975-),男,河南省淮阳县人,平顶山学院电气信息工程学院讲师.51单片机扩展U SB 接口的方法翟子楠1,2,王彦辉1,2(1.河南科技大学,河南洛阳471003;2.平顶山学院,河南平顶山467002)摘 要:讨论了在P89C51RD 单片机上扩展USB 接口的方法.介绍了USB 的相关技术标准.详细描述了P89C51RD 单片机与USBN9603的接口原理,给出了硬件原理图并介绍了固件程序与设备驱动程序软件的编制过程.廉价的51单片机具备了USB 接口,其应用范围将更加广泛.关 键 词:单片机;USB ;设备描述符;WDM中图分类号:TP368.1 文献标识码:A 文章编号:1673-1670(2006)02-0065-03 随着计算机外围接口的不断推陈出新,USB 接口已逐渐成为计算机上最重要的接口之一,其发展及应用涉及消费类电子产品、工业仪表、学校实验设备等许多领域.近年来以51核心的单片机也出现了具有USB 接口的型号,但价格偏高.以廉价的51单片机做控制单元,采用USB 接口芯片在实验装置上扩展USB 功能不仅可以实现USB 单片机的功能,同时也降低了成本.介绍了在Philips 公司的P89C51RD 单片机上扩展全速USB 接口芯片USBN9603的硬件及软件实现方法.1 USB 技术介绍USB ,全称为Universal Serial Bus (通用串行总线),是在1995年年底由Compaq ,Intel ,Microsoft ,N EC 等7家公司联合提出的.USB V1.1版本全速12Mbps ,低速1.5Mbps.在新的USB2.0接口标准中,它通过将内部时钟加快以及其他的方法,将传输速度提高到V1.1版本的40倍,达到了480Mbps 的速度.其突出的特点是支持热插拔和即插即用.物理连接使用4根信号线,分别是USBVCC ,GND ,差动D +,D -.具体电气特性可参考有关资料.USB 总线有4种数据传输方式,分别是控制传输、中断传输、批量传输和同步传输.主机要识别一个USB 设备,必须经过设备列举的过程.过程如下:1)使用预设的地址0获得设备描述符;2)设定设备的新地址;3)使用新地址获得设备描述符;4)获得配置描述符;5)设定配置描述符.USB 是以各种封包为主的通信协议,即SETU P 令牌封包.其格式为:[1]请求类型(1byte )bmRequest Type请求(1byte )bRequest数值(2byte )wValue指针(2byte )w Index长度(2byte )wLength数据数据段中的描述符最为重要,设备描述符,配置描述符,接口描述符,端点描述符等,它们以层次结构依次设置,每个描述符又有不同的定义.关于通信格式的详细设置规范可以查阅USB 规约.2 硬件原理硬件电路见图1,单片机P89C51RD2HBP 为Philips 公司生产的增强型51系列单片机,指令、引脚与80C51完全兼容,但性能强于普通51.片内64K B FLASH 存储器,1K BRAM ,每个机器周期为6个时钟周期,双DPTR 寄存器,支持ISP (ISP :In -System Programming 在系统编程)和IAP(IAP :In -Application Programming 在应用中编程).[2]US 2BN9603支持USB1.1协议,可以实现全速的USB 传输方式,即12Mbps 的高速传输.USBN9603内部有7个FIFO ,分别是endpoint0到endpoint6.其中endpoint0是8字节双向控制FIFO ,endpoint1,endpoint3,endpoint5为64字节发送FIFO ,endpoint2,endpoint4,endpoint6为64字节接收FIFO.[3]51单片机和USBN9603以复用并行接口的方式进行数据交换,51通过对USBN9603中寄存器的读写来控制芯片动作,包括USB 设备的配置,数据I/O 以及各种事件的处理.当USB 总线上有事件发生,9603将通过中断方式通知C51单片机,C51单片机在中断处理函数中访问9603的中断寄存器,判断是什么事件使中断产生,然后进行相应的事件处理操作.由于整个USBN9603只有一个中断信号输出,具体什么中断事件发生必须通过读取主事件寄存器MAEV 得到判断,进而转至相应处理程序.电阻R 1是上拉电阻,表明此设备是一个全速设备.电阻R 3、R 4为串联电阻,USB 规定阻值29~44Ω;电容C 6、C 7为高频旁路电容.USBN9603包含有一个3.3V 的电平转换器,用于上拉电阻及芯片内部的需要.这个3.3V 的电平转换器不能用于向其它电路供电.3 固件程序与设备驱动程序固件程序的主要功能是接收USB 的请求消息,请求都第21卷第2期2006年4月 平顶山学院学报Journal of Pingdingshan University Vol.21No.2Apr.2006来自于USB 主机,USB 设备根据主机的请求提供相应的描述符,采用中断传送过程,当USBN9603发出中断请求,单片机响应中断,查看USBN9603的各中断寄存器,找出产生中断的事件,然后处理.中断事件主要有:接收事件,发送事件,复位事件,唤醒事件,挂起事件,停止应答事件等.片内的主程序的任务为初始化P89C51与USBN9603.初始化P89C51主要是设置IN T0的中断寄存器和ISP 编程的波特率.初始化USBN9603主要是设置MCN TRL 使能电压调整器,设置时钟电路,设置EP EN 使能使用的端点,设置MASK 使能相应的中断允许位.程序的头文件应由用户定义,包括USB 主机的命令,USBN9603的寄存器映射,描述符等.例如用一个数组定义设备描述符的语句如下:图1 byte device descriptor[]={ 18,长度 device type ,描述符类型 0x10,0x01,符合USB1.1规范 0x00,群组码 00x00,次群组码 0x00,设备协议 0x08,最大数据包大小 0x00,0x04,生产商ID ,0400是National Semiconductor 的ID 0x00,0x01,产品ID ,每个产品的ID 不相同 0x01,0x00,产品版本的ID ,设备出厂编号 1,生产商描述字符串索引 2,产品描述字符串索引 0,序列号描述字符串索引 0x01 配置的数目 };在设备操作中最基本的就是如何读写控制器,下面2个函数WRITEUSB 和READUSB 分别用于对9603进行写操作和读操作,下面是程序代码片段.void WRITEUSB (byte adr byte dat ){X B YTE[adr|0xFE00]=dat ;/3写9603的寄存器3/}byte READUSB (byte adr ){return (X B YTE[adr|0xFE00]);}/3读9603的寄存器3/USB 设备驱动的WINDOWS 编程这里作一简单介绍.USB 设备驱动程序基于WDM.WDM 型驱动程序是内核程序,与标准的Win32用户态程序不同.采用了分层处理的方法,较高级的USB 设备驱动程序和较低级的USB 函数层.其中USB 函数层由2部分组成:较高级的通用串行总线模块(USBD )和较低级的主控制器驱动程序模块(HCD ).[4]USB 设备驱动程序不必具体对硬件编程,所有的USB 命令、读写操作通过总线驱动程序转给USB 设备.但是,USB 设备驱动程序必须定义与外部设备的通讯接口和通讯的数据格式,也必须定义与应用程序的接口.利用DriverStudio 软件可以快速的编制驱动程序文件.将驱动程序.sys 文件复制到C :\WINDOWS \SYSTEM32\DRIV ERS 目录下,・66・平顶山学院学报 2006年把安装信息文件.inf 文件复制到C :\WINDOWS \INF \O THER 目录下,就可以使用该设备了.[5]4 结束语USB 为计算机外设输入输出提供了新的接口标准.它使设备具有热插拔、即插即用、自动配置的能力,基于单片机开发的产品具有USB 标准接口后,应用范围将更加广阔.参考文献:[1]许永和.8051单片机USB 接口程序设计[M ].北京:北京航空航天大学出版社,2004.[2]周立功单片机.P89C51RX2xx ———带ISP/IAP 的8位Flash 单片机[EB/OL ].http :///philips /80c51/p89C51Rx2xx.as p.[3]National BN9603Universal Serial BusFull S peed Function Controller with Enhanced DMA Su p 2port [M/OL ].http :///search pdf/download.asp ?id =64827&filename =ns/USBN9603-28M.pdf.[4]石海东.单片机数据通信技术从入门到精通[M ].成都:电子科技大学出版社,2002.[5]吴 鹏.基于单片机USB 接口的PC 主机驱动程序和应用程序设计[J ].电子器件,2005,28(3).A Methood of Expanding USB Interface on the P 89C 51RD singleChip Computer SeriesZHA I Zinan 1,2,WAN G Yanhui 1,2(1.Henan University of Science and Technology ,Henan 471003;2.Pingdingshan University ,Henan 467000,China )Abstract :This paper discusses a method of expanding USB interface on the P89C51RD single chip com 2puter series.introduces USB technology standard ,and detailedly describes the interface theory of P89C51RDMCU and USBN9603.A hardware theory drawing is given.Besides ,it introduces the process of programming about firm device and device drive.Equipped with the USB interface ,the cheap 51mcu will have more extensive application.K ey w ords :single chip computer ;USB ;device descriptor ;WDM(上接第70页)[5]陈 鹏,等.电子技术课程现代化教学改革初探[J ].华北航天工业学院学报,2001(8):40-43.[6]陈德章.EWB 软件在电子电路教学中的应用[J ].广东水利电力职业技术学院学报,2003(2):36-38.The Application of EWB Simulation Soft w are inElectrotechnical Multimedia EducationZHA I Wei -qing ,ZHAN G Liu -fang ,SUN Xiao -jun (Pingdingshan University ,Pingdingshan ,Henan 467002,China )Abstract :Multisim2001is introduced in this paper ,including its simulation characteristics and basic func 2tions.Through the practical examples applied in electronic multimedia teaching ,the simulation technology and its advantages are described.K ey w ords :Multisim2001simulated software ;electric circuit simulation ;multimedia teaching・76・第2期 翟子楠,王彦辉:51单片机扩展USB 接口的方法。

相关文档
最新文档