当前位置:首页 > 单片机 > 单片机
[导读]   该系统的程序设计主要包括两大部分,分别是USB接口部分固件程序和计算机端的CH372驱动程序。前者主要包括了单片机和CH372的初始化、读写接口程序和中断服务程序;后者包括了USB设备的驱动程序和相关

  该系统的程序设计主要包括两大部分,分别是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初始化的程序代码如下。

  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的中断服务函数的程序代码如下:

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


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭