用CH372实现U盘与单片机通信功能

发布者:数字梦行最新更新时间:2018-03-05 来源: eefocus关键字:CH372  U盘  单片机  通信功能 手机看文章 扫描二维码
随时随地手机看文章

  该系统的程序设计主要包括两大部分,分别是USB接口部分固件程序和计算机端的CH372驱动程序。前者主要包括了单片机和CH372的初始化、读写接口程序和中断服务程序;后者包括了USB设备的驱动程序和相关应用程序的编写。这里主要介绍USB接口部分固件程序。
  
  在本例中CH372工作在内部固件模式,通过8位并行数据总线挂接到单片机AT89C51上,并通过端点2上的上传端点和下传端点完成USB数据的读写。在本地端,CH372芯片以内置的固件程序自动处理了USB通信中的基本事务,在计算机端,提供了驱动程序的应用层调用接口,用以完成USB设备与计算机间的通信。
  
  由于CH372支持内部固件模式,以内置的固件程序自动处理USB通信中的基本事务,所以程序设计不需要考虑USB枚举配置过程,大大简化了程序。
  
  1.变量定义和基本操作函数
  
  该部分主要包括了CH372命令、数据端口地址的定义,对操作命令码的定义,延时函数以及CH372的数据读写和写命令基本操作函数等几部分内容。
  
  (1)变量的定义。
  
  该部分主要包括了对CH372命令、数据端口地址、USB数据缓冲区以及操作命令代码的定义,其程序代码如下:

程序代码

程序代码

  (2)基本操作函数。
  
  该部分是进行CH372读写的基本操作程序,主要包括以下几个函数。
  
  函数DelayMs:延时毫秒。
  
  函数Delayus:延时微秒。
  
  函数WR_CH372_CMD_PORT:向CH372命令端口写命令数据。
  
  函数WR_CH372_DAT_PORT:向CH372数据端口写数据。
  
  函数RD_CH372_DAT_PORT:从CH372命令端口读数据。
  
  ①函数DelayMs:在CH372读写过程中需要用到毫秒延时,该函数可以满足要求,程序代码如下。

程序代码

  ②函数Delayus:在读写命令的过程中经常要用到微秒的延时,该函数可以用来调用,其程序代码如下。

程序代码

  ③函数WR_CH372_CMD_PORT:用以向CH372命令端口写命令数据,周期不小于4μs,如果太快则延时,其程序代码如下。

程序代码

  ④WR_CH372_DAT_PORT:用以向CH372数据端口写数据,周期不小于1.5μs,如果太快则延时,其程序代码如下。

程序代码

程序代码

  ⑤RD_CH372_DAT_PORT:用以从CH372命令端口读数据,周期不小于1.5μs,如果太快则延时,其程序代码如下。

程序代码

  2.系统初始化
  
  系统初始化包括单片机的初始化和CH372的初始化。单片机的初始化主要是完成外部中断INTO、I/O口等的初始化,程序较为简单,在这里不做详细介绍。CH372初始化主要用以其上电复位后,将默认的工作模式(未启用模式)初始化为外部固件模式或内部固件模式,并检查CH372的工作状态是否正常,以便对错误进行及时处理。其流程图如下图所示。

流程图

 


  CH372初始化的程序代码如下。

CH372初始化的程序代码

  3.读写接口函数及中断服务函数
  
  本例中CH372工作在内部固件模式,使用端点2的上传端点和下传端点。CH372芯片专门用于处理USB通信,在检测到USB总线的状态变化时或者命令执行完成后,CH372以中断方式通知单片机进行处理。
  
  该部分主要包括以下3个函数。
  
  函数CH372_RD_EP2:CH372的读取数据程序。
  
  函数CH372_WR_EP2:CH372的写数据程序。
  
  函数CH372_lnt0:CH372中断服务程序。
  
  (1)CH372的读取数据函数CH372_RD_EP2。
  
  该函数主要用以实现从CH372端点2的上传端点读出上位机发来的数据,单次的最大长度为64字节,当收到上位机数据后产生USB_INT_EP2_OUT(02)中断。其程序代码如下。

程序代码

  (2)CH372的写数据函数CH372_WR_EP2。
  
  该函数主要实现向CH372端点2的上传端点写入Length长度的数据,单次最大长度为64字节,当上位机接收数据后产生USB_INT_EP2_IN(OA)中断。其程序代码如下。

程序代码

程序代码

  (3)CH372的中断服务函数CH372_1nt0。
  
  该函数为外部中断服务函数,主要用以响应USB接口芯片的中断。中断服务函数的工作步骤如下。
  
  ①单片机进入中断服务程序时,首先执行GET_STATUS命令获取中断状态。CH372在GET_STATUS命令完成后,将INT#引脚恢复为高电平,取消中断请求。如果通过上述GET_STATUS命令获取的中断状态是下传成功,则单片机执行RD_USB_DATA命令从CH372读取接收到的数据,CH372在RD_USB_DATA命令完成后释放当前缓冲区,从而可以继续USB通信。单片机退出中断服务程序;如果通过上述GET_STATUS命令获取的中断状态是上传成功,则单片机执行WR._USB_DATA命令向CH372写入另一组要发送的数据。如果没有后续数据需要发送,单片机就不必执行WR_USBDATA命令。
  
  ②单片机执行UNLOCK_USB命令。
  
  CH372在UNLOCK_USB命令完成后释放当前缓冲区,从而可以继续USB通信。
  
  ③单片机退出中断服务程序。
  
  如果单片机已经写入了另一组要发送的数据,则CH372被动地等待USB主机在需要时取走数据,然后继续等待CH372向单片机请求中断,否则结束。
  
  CH372的中断服务函数的程序代码如下:

CH372的中断服务函数的程序代码

CH372的中断服务函数的程序代码

  注意事项
  
  1.硬件方面
  
  (1)在设计PCB板时应注意:退耦电容C3和C4尽量靠近CH372的相连引脚;UD+和  UD-信号线贴近平行布线,尽量在两侧提供地线或者覆铜,减少来自外界的信号干扰;尽量缩短XI和XO引脚相关信号线的长度,在相关元器件周边环绕地线或者覆铜。
  
  (2)为进一步地保护CH372的UD+和UD-信号线,对于需要频繁带电插拔USB设备的应用场所或静电较强的环境,建议在电路中增加USB信号瞬变电压抑制器件。
  
  (3)对于支持睡眠功能的CH372芯片,在其睡眠期间,应该使CH372的各个I/O引脚(除RSTI引脚)处于悬空或者高电平状态,避免产生不必要的上拉电流
  
  2.软件方面
  
  在单片机程序设计中,应注意命令的延时及读取数据的时间间隔。主程序在检测到USB设备连接后,等待数百毫秒再对其进行操作。


关键字:CH372  U盘  单片机  通信功能 引用地址:用CH372实现U盘与单片机通信功能

上一篇:基于PROG-100单片机读写24C01的应用程序
下一篇:uIP在51单片机上的移植

推荐阅读最新更新时间:2024-03-16 15:56

单片机程序跑飞现象及解决--看门狗电路
1、程序跑飞现象 随着单片机在能源领域中的广泛应用,单片机的抗干扰问题越来越突出,煤矿井下环境一般比较恶劣,这便会为单片机控制系统带来各种干扰,以致系统不能正常工作。单片机应用系统的抗干扰性能主要取决于硬件的抗干扰设计,但软件抗干扰设计作为硬件抗干扰的完善和补充,作用也非常重要,因为大量的干扰通常并不能影响系统内硬件的运作,却常会使系统的软件无法正常运行,单片机应用的一个突出问题,便是单片机运行过程中经常出现的程序跑飞现象。 在单片机系统中,因为干扰的原因,在非预期的情况下,使得程序计数器PC 的值发生随机的变化,从而使得程序的流向指向不确定区域,这便是程序的跑飞。程序跑飞后或者会使指令的地址码和操作码发生改变,PC 把操作数当作
[单片机]
<font color='red'>单片机</font>程序跑飞现象及解决--看门狗电路
MSP430单片机的PWM操作
//******************************************************************************* // 描述:MSP430实现PWM。反映在LED灯上,可以看到LED灯的亮度不断变化 // // ACLK= n/a, MCLK= SMCLK= default DCO ~ 800k // // MSP430F13x // ------------------- // /|\| XIN|- // | | | 32kHz // --|RST XOUT|- // | | // | P1.2|-- LED // // // 硬件电路:MSP430F135核心实验板-I型 //
[单片机]
FFT算法在单片机中的使用&&LCD12864驱动
本次创新基金我是要做一个简易的频谱仪,核心就是要进行一个FFT运算。大家知道,如果采用DSP芯片效果那是相当好的。但由于项目资金以及时间不够等情况,我采用的是ATMEL公司的AVR单片机,这款单片机的FLASH存储和内存比51单片机犀利得多。 由于采用的是12864液晶,也就是一个横128点竖64点的一个点阵,因而采用128点FFT运算已然够了,因为即使得到再多的数据也无法在液晶上可视化显示出来。本文是基于128点FFT运算。 程序如下: #include iom16v.h #include macros.h #include math.h #define N 128 #define PI 3.141592653589 #de
[单片机]
探析上拉电阻和下拉电阻的用处和区别
因为单片机的输出端都是开漏输出的,就像三极管的集电极一样,如果没有上拉电阻它输出不了高电平。而下拉电阻就是拉低电平,跟上面是相反的,不过在单片机中,一般都是要上拉电阻的多,很少有下拉电阻的单片机。 加上下拉电阻就是加在单片机管脚的带负荷能力.如上拉电阻的接法就是电源正通过一个合适阻值的电阻后接到需上接的管脚即可. 上拉就是将不确定的信号通过一个电阻嵌位在高电平,电阻同时起限流作用。同理,下拉就是将不确定的信号通过一个电阻嵌位在低电平,电阻同时起限流作用。 上拉是对器件注入电流;下拉是输出电流,只是弱强。 上拉电阻的阻值不同,没有什么严格区分,对于非集电极(或漏极)开路输出型电路(如普通门电路)提升电流和电压的能力是
[单片机]
探析上拉电阻和下拉电阻的用处和区别
针对微控制器应用的采用FPGA的嵌入式应用
  当你打开任何智能电子设备(从老式的电视遥控器到全球定位系统),会发现几乎所有的设备都至少采用了一个微控制器(MCU),很多设备里还会有多个微控制器。MCU往往被用于专用的终端产品或设备中,它能够很好地完成特殊任务。另一方面,PC的大脑,即微处理器被设计用于实现许多通用的功能。微控制器可用于降低成本,加固工业和自动化应用,将其嵌入FPGA中时,还可以通过重新编程迅速改变功能。这种灵活性使得单个设备可应用于接口标准不同的多个市场。   在选择微控制器时应考虑哪些因素?本文将主要探讨采用FPGA的嵌入式应用。不过,选择任何微控制器的标准本质上都是相同的。设计者需要考虑下列因素:终端产品的成本是多少?实现设计以及存储控制程序需要多少
[工业控制]
针对<font color='red'>微控制器</font>应用的采用FPGA的嵌入式应用
例说单片机数据通信之模拟IIC通信
  IIC 即Inter-Integrated Circuit(集成电路总线),这种总线类型是由飞利浦半导体公司在八十年代初设计出来的,主要是用来连接整体电路(ICS) ,IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源。这种方式简化了信号传输总线。   I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。以51单片机和AT24C02介绍IO模拟IIC通信。   启始与停止   启始条件:必须在所有命令之前发送,时钟线保持高电平期
[单片机]
例说<font color='red'>单片机</font>数据<font color='red'>通信</font>之模拟IIC<font color='red'>通信</font>
瑞萨电子推出了新的RL78/L1A系列微控制器
RL78/L1A系列微控制器,内置精确的生物感应前端,可用于医疗应用 2016年10月5日,日本东京讯 全球领先的半导体解决方案供应商瑞萨电子株式会社(TSE:6723)今日宣布推出RL78/L1A系列低功耗16位微控制器(MCU),该产品配备液晶显示器(LCD)驱动器,非常适合医疗应用中使用的电池供电型感应设备,如血糖监测仪、乳酸盐分析仪、胆固醇分析仪和其它配备生物化学传感器的设备。RL78/L1A内置模拟前端(AFE,注1)生物感应电路,通过一台监测设备即可测量血糖和血红蛋白。 RL78/L1A具有高精度的模拟功能以及更长的电池续航时间,可提供更高性能。因此,系统设计人员可以利用RL78/L1A的低功耗和更高精度的模拟
[医疗电子]
瑞萨电子推出了新的RL78/L1A系列<font color='red'>微控制器</font>
基于单片机无线病房呼叫器设计
  临床求助呼叫是传送临床信息的重要手段,病房呼叫器是病人请求值班医生或护士进行诊断或护理的紧急呼叫工具,可将病人的请求快速传送给值班医生或护士,并在值班室的监控中心电脑上留下准确完整的记录,是提高医院和病室护理水平的必备设备之一。呼叫系统的优劣直接关系到病员的安危,历来受到各大医院的普遍重视。   它要求及时、准确可靠、简便可行、利于推广。我国传统的病房呼叫系统采用的多是有线传输,存在着安装布线复杂,检查维修困难,抗干扰能力差,病房扩建不易及费用高,不雅观的缺陷。为克服以上的不足,本研究介绍一种无线的病房呼叫器,其使用专用的射频模块,并使用单片机控制。这样不但解决了复杂布线等问题,更能提高医疗服务水平,适应现代社会需求。
[单片机]
基于<font color='red'>单片机</font>无线病房呼叫器设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved