基于usb接口的单片机与pc机通信学位论文.docx
《基于usb接口的单片机与pc机通信学位论文.docx》由会员分享,可在线阅读,更多相关《基于usb接口的单片机与pc机通信学位论文.docx(31页珍藏版)》请在冰点文库上搜索。
基于usb接口的单片机与pc机通信学位论文
基于USB接口的单片机与PC机通信
摘要:
安装USB设备不需要用户自己设置硬件与软件的选项,USB接口的传输速度要比计算机传统的串行口和并口快的多,所以USB设备已经广泛应用。
由于协议的复杂性,在系统中实现USB主机功能的实例还不是很多。
因此本文没有从复杂的USB总线协议入手,而是选择了南京沁恒公司出产的USB接口芯片CH375。
其具有内置固件模式和可编程的2311外部固件模式,可以根据需要任意选择工作模式。
关键词:
单片机;CH375;USB;协议
TheDesignofthecommunicationbetweenMCUandPCwhichis
basedonUSBinterface
Abstract:
USBdevicedoesnotrequireuserstoinstalltheirownsetofhardwareandsoftwareoptions,andcomputertransmissionspeedfasterthanthetraditionalserialandparallelport,soUSBdeviceshavebeenwidelyused.Becauseofthecomplexityoftheagreement,inthesystemofUSBhostfunctionrealizationexampleisnotalot.ThereforethisarticledoesnotstartingwiththecomplexUSBagreement,butchosetheUSBinterfacechipCH375whichproducedbyNanjingQinHengcompany,theirmodelhasabuilt-infirmwareandfirmwareprogrammableof2311externalmodel,wecanchoosethemodeofoperationwithaneedforarbitrary.
Keywords:
SingleChipMicrocontroller;CH375;USB;Agreement
目录
1前言1
1.1题目的来源与开发意义1
1.2系统功能概述1
2系统硬件设计2
2.1方案论证2
2.2系统硬件总体设计概述2
2.3系统功能概述3
2.4系统各模块的设计4
2.4.1单片机控制系统4
2.4.2USB接口模块6
3系统软件设计11
3.1系统软件总体设计思想11
3.2各功能模块软件程序设计11
4系统调试16
4.1硬件电路调试16
4.2各功能模块软件调试16
5结论18
参考文献19
致谢20
1前言
1.1题目的来源与开发意义
USB的低功耗,可靠性,价位低等优点,在人们日常生活中应用越来越广泛,各种各样的USB产品应运而升[1],并且随着技术的发展,USB的版本以发展到了3.0,传输速度也更快,更强,更稳定。
而单片机以其良好的普及性,易用性,稳定的控制性不断的出现在我们生活中的各个角落,并且一发不可收拾[2]。
电子应用中数据传输占了很大一部分。
我把这几项当前技术融合在一起进行开发,实现可携带的支持计算机热插拔的单片机与PC机之间的数据传输。
1.2系统功能概述
单片机与计算机之间的通信功能实现,这里应用了由南京沁恒公司生产的CH375芯片作为单片机与计算机USB接口芯片[3]。
使用10位的AD串行AD芯片TLC1549进行电压采集,使用电位器来模拟传感器。
本次设计主要利用STC89C52RC单片机作为主要核心模块,利用C51语言行控制,以C语言作为整合的开发环境,可大大缩短软件设计时间。
上位机采用的是VC++在VisualStudio2010上编写的一个简单的控制台程序,USB驱动采用了沁恒公司的通用CH375驱动软件。
通过键盘给上位机(PC)输入不同的命令可以控制下位机(单片机)的三个不同颜色的LED。
同时单片机向PC发送采集到的电压值。
这里支持计算机热插拔,挟带方便,设备占用空间小,低功耗是本设计的创新之处,而且相应的CH375接口模块成了印刷式电路板,为以后学习和开发计算机与单片机通过U口传输数据的同学提供了便捷的硬件环境。
2系统硬件设计
2.1方案论证
方案一:
有关USB控制芯片很多但主要有两个来源,一个是CypressSemiconductor,另一个是ScanLogic。
我们可以选择市面比较通用的CypresssenCoRe控制器芯片CY4C63743,此芯片电路设计起来比较容易。
但此芯片需要固件支持。
En指令相对简单,可以使用汇编语言编译器来实现,但固件编程相对繁琐,而且CY4C63743结和了单片机与USB数据传输的功能相对开发需要了解内部的时续与中断控制,类似于嵌入了USB功能的单片机。
方案二:
用南京沁恒公司的CH375芯片,需要外接微控制器,电路稍微麻烦一点,但是我的设计只需要用到USB设备模式一块,而我们可以让CH375工作在内置固件下,我们减轻了单片机方面的固件编写负担,只需按要求让单片机将要发送的数据传给CH375即可,CH375自行与PC进行数据交换,这同样节省了对复杂协议的学习时间。
而单片机更可以选择STC系列的51单片机,这种单片机可以通过串口在线编程,方便开发。
由此可见方案二更有效。
2.2系统硬件总体设计概述
硬件设计相应的分两个模块,一方面是控制模块由宏晶生产的STC系列的51单片机为核心的单片机做控制;另一方面由CH375做为USB的通信接口芯片的接口模块。
控制模块中主要用到了STC89C52单片机,其中的P0口与CH375的数据并口相连,所以P0口必须接10K的上拉电阻,在控制模块上有一个与通信接口模块相连的插座,共16个引脚其具体对应了控制模块与通信接口模块之间的GND,相应的复位引脚,还有与CH375并口模式相对应的控制,数据引脚A0,WR,RD,CS,INT,D0-D7。
TLC1549与单片机通信是串行模式,所以只需占用单片机的三个IO口。
使用LED来显示PC上的命令信息。
通信接口模块分两个部分一个是与PC机相连的CH375部分,一个是单片机控制部分。
为了方便开发,单片机单独供电,而没有与USB模块共用PC上的USB电源。
为了保护AD芯片,设计了AD输入保护。
电路在防止干扰方面,在每个芯片的电源端添加了去耦电容。
如图2.1为硬件实物图
图2.1硬件实物
2.3系统功能概述
如图2.2为系统框图
图2.2系统框图
该设计实现单片机端通过AD模块采集数据经USB接口模块发送到PC机的界面上显示,同时PC机端也可通过按键控制单片机端的LED亮灭,实现双向通信。
具体工作流程:
首先进行各个模块初始化,然后在PC机端发送一个数据包,长度为64,单片机端接收到这个数据包,根据数据包的内容来控制LED灯的暗灭,接着AD模块采集数据,这里的数据是电压值,可传送2.50到5.00伏的电压值,单片机端接收到AD模块采集的数据,再通过USB通信接口模块传输到电脑上显示出来。
2.4系统各模块的设计
2.4.1单片机控制系统
如图2.3为单片机控制模块
图2.3单片机控制模块
STC89C52RC单片机作为硬件的核心处理器,它的工作电路分为三部分:
晶振电路、复位电路、电源电路。
晶振为CPU提供工作需要的高频率、高精确的时钟;复位电路在芯片在上电复位或者手动复位时引导程序从地址00H开始执行;而电源电路为芯片提供稳定且噪声低的直流电源。
1控制模块原理
由图2.2的系统总框图可以看出,单片机直接控制CH375,向其发送数据或者读取数据。
单片机与CH375采取系统总线接口,数据线为P0口,地址线为P0口(低位)和P2口(高位)。
在电路中P0口连接CH375的8位并行数据接口,P2口只接了P2.0和P2.6,所以在发送地址的时候只有这两位有效,其他的地址线全部无效(这样接主要是为了简化电路)。
通信前需要对USB初始化,具体过程如下:
单片机通过上面的数据总线,先CMD_CHECK_EXIST这个测试命令,然后发送0x55再读取数据,若读取的数据是~0x55则说明芯片正常工作,否则将对CH375进行多次重复发命令(80次),执行硬件复位。
确定芯片正常工作后就对芯片设置USB工作模式,这里的02H表示启用的设备方式并且使用内置固件模式。
设置模式成功后,单片机将在10到20us内读取到CMD_RET_SUCCESS信号以确定CH375已经就绪。
最后,单片机进行外部中断0的初始化,以保证CH375收到数据后能向单片机发送中断信号。
单片机的对CH375进行读写数据都是在外部中断0的中断服务程序里面执行的。
进入中断后,首先关闭总中断,防止在中断重入。
然后发送CMD_GET_STATUS命令来读取中断状态,然后分别对三种不同的中断状态进行处理。
其中在USB_INT_EP2_OUT状态下先读取数据包,然后AD采集数据并发送数据包。
最后重新开启外部中断0,退出中断服务,等待下一次中断。
P0口作为与CH375交流数据,命令的通信并口,INT0作为中断服务程序中断接口其他端口如图接,也可以选择其他单片机端口。
2高速串行AD芯片TLC1549
TLC1549是美国德州仪器公司(以下简称TI)的一款高速串行的10位AD芯片。
它采用简单的S通信,只使占用单片机的三根IO口,如图2.4
图2.4AD模块
从图2.4可以看出,TLC1549工作电路非常简单,而不像一般AD芯片需要接上配对的电阻、电容以及晶振才能保证稳定的工作,只需接上电源和一个103的去耦电容即能工作。
在此基础上,本设计添加了AD输入保护电路。
保护电路是由两个二极管构成,如图所示,在AD输入电压超出5V或者低于0V的时候,二极管导通,使电压调整到正常范围,这样就保护了AD输入,防止芯片因此损坏。
2.4.2USB接口模块
CH375与USB连接及自身管脚连接具体如图2.5所示。
图2.5USB接口模块图
J2是一个USB接口,与电脑相连接,J1是一个双排针左边是通信的端口与单片机的P0口连接,通过这个排针可以和单片机的各个引脚相连。
1USB的简介
USB是在1994年底由英特尔、康柏、IBM、Microsoft等多家公司联合提出的。
不过直到近期,它才得到广泛地应用。
从1994年11月11日发表了USBV0.7版本以后,USB版本经历了多年的发展,到现在已经发展为2.0版本,成为目前电脑中的标准扩展接口。
USB是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。
USB接口支持设备的即插即用和热插拔功能。
USB接口可用于连接多达127种外设,如鼠标、调制解调器和键盘等。
USB自从1996年推出后,已成功替代串口和并口,并成为当今个人电脑和大量智能设备的必配的接口之一。
USB2.0有高速、全速和低速三种工作速度,高速是480Mbit/s,全速是12Mbit/s,低速是1.5Mbit/s。
其中全速和低速是为兼容USB1.1而设计的,因此选购USB产品时不能只听商家宣传USB2.0,还要搞清楚是高速、全速还是低速设备。
USB总线是一种单向总线,主控制器在PC机上,USB设备不能主动与PC机通信。
2CH375芯片简介
CH375是一个USB总线的通用接口芯片,支持USB-HOST主机和DEVICE/SLAVE从机两种工作模式。
本设计使用的是从机模式与PC进修双向通行。
USB-DEVICE/SLAVE设备方式。
在本地端,CH375具有8位数据总线和读、写、片选控制线以及中断输出,可以方便地挂接到单片机/DSP/MCU/MPU等控制器的系统总线上。
CH375的USB设备方式与CH372芯片完全兼容,CH375包含了CH372的全部功能。
CH375的USB主机方式支持常用的USB全速设备,外部单片机可以通过CH375按照相应的USB协议与USB设备通讯。
CH375还内置了处理Mass-Storage海量存储设备的专用通讯协议的固件,外部单片机可以直接以扇区为基本单位读写常用的USB存储设备(包括USB硬盘/USB闪存盘/U盘)。
CH375硬件连接大致框如图2.6
图2.6系统总体框图
CH375芯片特点:
1.低速和全速USB-HOST主机接口,兼容USBV2.0,外围元器件只需要晶体和电容。
2.低速和全速USB设备接口,完全兼容CH372芯片,支持动态切换主机与设备方式。
3.主机端点输入和输出缓冲区各64字节,支持12Mbps全速USB设备和1.5Mbps低速设备。
4.支持USB设备的控制传输、批量传输、中断传输。
5.自动检测USB设备的连接和断开,提供设备连接和断开的事件通知。
6.内置控制传输的协议处理器,简化常用的控制传输。
7.内置固件处理海量存储设备的专用通讯协议,支持Bulk-Only传输协议和SCSI、UFI、RBC或等效命令集的USB存储设备(包括USB硬盘/USB闪存盘/U盘/USB读卡器)。
8.通过U盘文件级子程序库实现单片机读写USB存储设备中的文件。
9.并行接口包含8位数据总线,4线控制:
读选通、写选通、片选输入、中断输出。
10.串行接口包含串行输入、串行输出、中断输出,支持通讯波特率动态调整。
引脚如图2.7
图2.7引脚图
引脚含义如表2.2
表2.2引脚含义表
引脚号
引脚名称
类型
引脚说明
28
VCC
电源
正电源输入端,需要外接0.1uF电源退耦电容
12-23
GND
电源
公共接地端,需要连接USB总线的地线
9
V3
电源
在3.3V电源电压时连接VCC输入外部电源,
在5V电源电压时外接容量为0.01uF退耦电容
13
XI
输入
晶体振荡的输入端,需要外接晶体及振荡电容
14
XO
输出
晶体振荡的反相输出端,需要外接晶体及振荡电容
10
UD+
双向三态
USB总线的D+数据线,内置可控的上拉电阻
11
UD-
双向三态
USB总线的D-数据线
22~15
D7~D0
双向三态
8位双向数据总线,内置上拉电阻
4
RD#
输入
读选通输入,低电平有效,内置上拉电
3
WR#
输入
写选通输入,低电平有效,内置上拉电阻
27
CS#
输入
片选控制输入,低电平有效,内置上拉电阻
1
INT#
输出
在复位完成后为中断请求输出,低电平有效
8
A0
输入
地址线输入,区分命令口与数据口,内置上拉电阻,
当A0=1时可以写命令,当A0=0时可以读写数据
24
ACT#
输出
在内置固件的USB设备方式下是USB设备配置完成状态输出,低电平有效。
对于CH375A芯片,在USB主机方式下是USB设备连接状态输出,低电平有效
5
TXD
输出
仅用于USB主机方式,设备方式只支持并口,在复位期间为输入引脚,内置上拉电阻,如果在复位期间输入低电平那么使能并口,否则使能串口,复位完成后为串行数据输出
6
RXD
输入
串行数据输入,内置上拉电阻
2
RSTI
输入
外部复位输入,高电平有效,内置下拉电阻
25
RST
输出
电源上电复位和外部复位输出,高电平有效
26
RST#
输出
电源上电复位和外部复位输出,低电平有效
7
NC.
空脚
空脚,必须悬空
命令
命令是CH375与单片机进行联络的核心,芯片内部的USB通行协议都要通过命令来实现,所以了解了CH375的命令就如同在8051中的C51语言,所以这部分很重要。
代码
命令名称
输入数据
输出数据
命令用途
06H
RESET_ALL
(等40mS)
执行硬件复位
06H
CHECK_EXIST
任意数
按位取反
测试工作状态
15H
SET_USB_MODE
模式代码
(等20uS)操作状态
设置USB工作模式
22H
GET_STATUS
中断状态
获取中断状态并取消请求
02H
SET_BAUDRATE
分频系数
(等1mS)
操作状态
设置串口通讯波特率
分频常数
28H
RD_USB_DATA
数据长度
从当前USB中断的
端点缓冲区读取数据块
数据流
2BH
WR_USB_DATA7
数据长度
向USB主机端点的
输出缓冲区写入数据块
数据流
各命令意义如表2.3
表2.3命令含义表
中断原因如表2.4
表2.4中断状态表
中断状态字节
名称
中断状态分析说明
位7~位4
位3~位2
位1~位0
(保留位)
当前事务
当前端点
总是0000
00=OUT事务
00=端点0
10=IN事务
01=端点1
11=SETUP事务
10=端点2
11=USB总线复位
表2.5是中断状态的分析说明。
在内置固件模式的USB设备方式下,单片机只需要处理表中标注为灰色的中断状态,CH372内部自动处理了其它中断状态。
表2.5中断状态表
中断状态值
状态名称
中断原因分析说明
01H
USB_INT_EP1_OUT
辅助端点/端点1接收到数据,OUT成功
09H
USB_INT_EP1_IN
中断端点/端点1发送完数据,IN成功
02H
USB_INT_EP2_OUT
批量端点/端点2接收到数据,OUT成功
0AH
USB_INT_EP2_IN
批量端点/端点2发送完数据,IN成功
05H
USB_INT_USB_SUSPEND
USB总线挂起事件(如果已CHK_SUSPEND)
06H
USB_INT_WAKE_UP
从睡眠中被唤醒事件(如果已ENTER_SLEEP)
功能说明
CH375芯片可以工作于USB-HOST主机方式或者USB设备方式。
CH375的USB设备方式与CH372芯片完全兼容,CH375的USB主机方式支持并行接口和串行接口,本设计使用的是并行接口。
在USB主机方式下,CH375支持各种常用的USB全速设备,外部单片机需要编写固件程序按照相应的USB协议与USB设备通讯。
但是对于USB存储设备,CH375内置了相关协议,通常情况下,外部单片机不需要编写固件程序,就可以直接通讯。
CH375工作在并口,设备模式下(毕业设计相应的主要应用就是这类模式,就稍详细介绍这部分,而串口模式只工作在主机模式下不详细介绍了)
硬件连接
CH375芯片占用两个地址位,当A0引脚为高电平时选择命令端口,可以写入新的命令,或者读出中断标志;当A0引脚为低电平时选择数据端口,可以读写数据。
下表为并口I/O操作的真值表(表中X代表不关心此位,Z代表CH372三态禁止)。
表2.6并口I/O操作的真值表
CS#
WR#
RD#
A0
D7-D0
对CH372芯片的实际操作
1
X
X
X
X/Z
未选中CH372,不进行任何操作
0
1
1
X
X/Z
虽然选中但无操作,不进行任何操作
0
0
1/X
1
输入
向CH372的命令端口写入命令码
0
0
1/X
0
输入
向CH372的数据端口写入数据
0
1
0
0
输出
从CH372的数据端口读出数据
0
1
0
1
输出
从CH372B的命令端口读取中断标志,
位7等效于INT#引脚
3上位机功能介绍
设置发送的第一个字节为0X21为约定命令,若接收方收到的不是0X21,则为错误数据,从新请求发送。
在通信的过程中,采取了半双工的通信模式。
上位机、下位机轮流发送64个字节的数据。
在本设计的实际使用中,只使用了3到5个字节,其他的字节都为无效信息。
在上位机上实现了显示下位机采集的数据信息,同时,上位机发送控制信息,下位机使用了LED来模拟控制。
上位机界面如图2.8
图2.8上位机软件界面
3系统软件设计
3.1系统软件总体设计思想
本系统软件设计分两部分,下位机部分和上位机部分。
下位机部分应用的是C51语言。
上位机界面图形编辑用的是VC++。
单片机负责通过CH375上传数据,PC通过VC++程序调用USB驱动程序,查询动态链接库的数据信息,上传的数据存储在动态链接库中。
这样最终的上传数据经VC++显示在PC上。
3.2各功能模块软件程序设计
下位机模块软件程序设计
AD采集数据的流程图3.1
图3.1AD采集数据的流程图
具体程序如下:
/*********************************************************************/
unsignedintAD_Change(void)//TLC549驱动程序
{
unsignedinti,temp=0;
AD_In=0;
_nop_();
_nop_();
CS=0;
_nop_();
_nop_();
_nop_();
_nop_();
if(AD_Out==1)
temp+=1;
for(i=0;i<10;i++)
{
AD_In=1;
_nop_();
_nop_();
AD_In=0;
_nop_();
_nop_();
if(i!
=9)
{
temp=temp<<1;
if(AD_Out==1)temp+=1;
}
}
CS=1;
returntemp;
}
CH375发送数据部分流程如图3.2
图3.2CH375发送数据流程图
中断程序如下:
/*****************************************************************************************/
voidmCh375Interrupt()interrupt0using1//CH375中断服务程序,使用寄存器组1
{
unsignedcharInterruptStatus;
unsignedchari,length;
unsignedcharxdatabuffer[64];//64字节的缓冲区存放数据
EA=0;
CH375_WR_CMD_PORT(CMD_GET_STATUS);//获取中断状态并取消中断请求
InterruptStatus=CH375_RD_DAT_PORT();//