USB-CAN适配器设计
- 格式:doc
- 大小:388.00 KB
- 文档页数:12
基于ARM 和uC/OS-II 嵌入式操作系统的USB-CAN 适配器设计(中国农业大学工学院 北京 100083) 冯宁摘 要:本文提出一种使用USB 接口实现CAN 总线网络与计算机连接的方案。
讨论了CAN 总线与计算机之间的硬件接口电路,同时分析了在ARM微控制器和uC/OS-II嵌入式操作系统的适配器固件编程方法及USB 驱动程序设计思路。
关键词:嵌入式实时操作系统(uC/OS-II); USB; CAN 总线; ARM1 引言CAN(Controller Area Network)总线是德国Bosch公司推出的,最初应用于汽车内部测量与执行部件之间的数据通信。
CAN总线具有突出的可靠性、实时性和灵活性而成为现场总线的主流品种之一,在工业控制领域得到了普遍应用,并被认为是最有前途的现场总线之一[1]。
现场总线网络与计算机通信可通过RS232、ISA或PCI接口来实现。
随着计算机接口技术的发展,ISA接口已经被淘汰,RS232接口数据传输率太低,PCI虽仍是高速外设与计算机接口的主要渠道,但其主要缺点是占用有限的系统资源、 设计复杂、需有高质量的驱动程序保证系统的稳定,且无法用于便携式计算机的扩展。
随着USB1.1、USB2.0规范的相继制定, 为外设与计算机的接口提出了新的发展方向。
USB的主要特点有:外设安装简单,可实现热插拨;通讯速率高,全速传送速率为12Mbps,支持多设备连接。
本文给出使用USB1.1协议实现CAN总线适配器的软硬件设计方法。
整个系统软件设计主要开发适配器的固件及计算机的驱动程序、 应用程序,以达到用USB接口连接CAN总线网络的目的。
2 适配器硬件设计2.1 LPC2292的特点本设计选用的LPC2292是PHILIPS公司推出的一款功能强大的超低功耗的具有ARM7TDMI 内核的32位微控制器。
144脚封装、两个32位定时器、八路10位ADC、两路CAN通道和PWM通道以及4个的外部中断,内部嵌入256K字节高速Flash存储器和16K字节静态RAM。
基于CH341的USB-CAN适配器设计浣上【期刊名称】《现代电子技术》【年(卷),期】2012(035)018【摘要】In order to make the host to access CAN bus conveniently, a design scheme of portable plug-and-play USB- adapter is presented. The adapter takes CH341 as a connection chip of USB to translate the UBS bus protocol into the parallel port one. SJA1000 chip is selected as the CAN controller to support CAN2. OB protocol, so as to adapt the needs of different CAN bus. The system gets power directly from USB without the intervention of MCU/DSP. Therefore, the electro-circuit becomes simple. The host can driver SJA1000 and access CAN bus by means of the active parallel port of CH341and relevant time sequence logic transfer. The adapter supports the active configuration of the host, and has high flexibility and reliability. The experiment results validate that the adapter has the ability to link all sorts of CAN buses, and its velocity can reach up to 1 Mb/s.%为便捷上位机访问工业现场CAN总线,提出了一种便携式即插即用的USB-CAN适配器设计方案.该适配器采用CH341作为USB总线转接芯片,直接把USB总线协议转化为并口协议;选用SJA1000芯片作为CAN控制器,支持CAN2.0B协议,以适应不同的CAN总线需求.系统从USB端口取电,且无需MCU/DSP介入,简化了电路结构;利用CH341主动并口功能,经相应的控制时序逻辑转换,上位机即可驱动SJA1000,进行CAN总线访问.该适配器支持上位机自主配置,灵活强,可靠性高.经实验测试,适配器支持访问不同的CAN总线网,速率可达1 Mb/s.【总页数】3页(P50-52)【作者】浣上【作者单位】中国航天员科研训练中心,北京100094【正文语种】中文【中图分类】TN919-34【相关文献】1.智能USB-CAN数据适配器设计与应用 [J], 孙晓燕;刘兆凯2.基于STM32的微型USB-CAN适配器开发 [J], 刘纯虎;付斌;盛庆华3.基于CH341S的USB接口设计与实现 [J], 严培林;周涛4.基于ATmega8515的USB-CAN适配器的实现 [J], 康书峰;徐美华;冉峰5.基于CH341的USB总线数据采集系统设计 [J], 程立敏因版权原因,仅展示原文概要,查看原文内容请购买。
USB-CAN适配器设计基于USB的CAN总线适配器设计07自动化4班梁海森(200730460411)邝巨泉(200730460409)1、摘要随着现场总线技术和计算机外设接口技术的发展,现场总线与计算机快速有效的连接又有了更多的方案,USB作为一种新型的接口技术,以其简单易用、速度快等特点而备受青睐。
本文简要提出了USB 接口与CAN总线连接方案,论述了系统的硬件构成,固件开发和驱动程序等内容。
关键词:现场总线 USB CAN总线2、引言现场总线作为二十世纪80年代发展起来的新兴技术,在工业现场已有了广泛的应用。
随着信息技术的飞速发展,各种数据的实时采集和处理在现代工业控制中已成为必不可少的部分。
这要求我们设计的接口简单灵活且具有较高的数据传输率。
现场总线是连接智能现场设备和自动化系统的数字式、双向传输、多分支结构的通信网络。
如何将其与PC机安全可靠低成本的互连,是一个亟待解决的问题。
传统的外设与主机的通信接口难以满足上述要求。
这些接口一般采用PCI 总线或RS-232串行总线。
PCI总线虽然有很高的传输率(可达132Mbps),但是它们的扩充槽相当有限,且设计复杂。
RS-232串行总线连接方便,可是它的带宽非常有限,传输速度慢。
USB技术正是顺应这一要求提出的一种快速的,双向的,同步传输的,廉价的并可以进行热插拔的通用串行总线。
它还提供了内置电源,可向低压设备提供5伏的电源。
正是由于USB的这些特点,使其获得了广泛的应用。
CAN总线是现场总线的一种有效支持分布式控制或实时控制的串行通信网络,具有卓越的特性和极高的可靠性,特别适合工业过程监控设备的互连,被公认为几种最有前途的现场设备总线之一。
整个系统设计目的就是设计一个适配器,可以将CAN总线数据通过USB接口迅速转送到PC机进行处理分析,也可以通过它向CAN节点传送数据或命令,以实现计算机与现场设备的通讯。
3、硬件电路的设计该系统主要由AT89C52控制电路、USB 接口电路、CAN总线电路、挂起复位电路、光电隔离电路等组成,本设计系统主要部件结构图如下:图1 硬件电路结构图图2 硬件仿真原理图3.1 AT89C52控制电路AT89C52 是一个低电压,高性能CMOS 8位单片机,片内置8k bytes的可反复擦写的Flash存储单元和256 bytes的随机存取数据存储器(RAM),功能强大。
2017年第5期信息与电脑China Computer&Communication网络与通信技术基于USB 接口的CAN 总线设计与研究李新中(焦作大学 远程教育学院,河南 焦作 454000)摘 要:笔者以USB 总线和CAN 总线为研究对象,设计了一种基于CH372的CAN 总线适配器系统。
整个系统包括单片机控制、USB 总线接口、CAN 总线接口和光电隔离等电路模块。
主要完成了由单片机、USB 接口芯片、CAN 控制器、CAN 收发器、光电隔离器件等构成的CAN 总线适配器的总体设计,进行了各模块的电路设计和相应的程序设计。
关键词:CAN 总线;USB 总线;适配器;光电隔离中图分类号:TP273.5 文献标识码:A 文章编号:1003-9767(2017)05-174-02Design and Research of CAN Bus based on USB InterfaceLi Xinzhong(School of Distance Education, Jiaozuo University, Jiaozuo Henan 454000, China)Abstract: The author designs a CAN bus adapter system based on CH372 with USB bus and CAN bus as the researchobject. The whole system includes single-chip control, USB bus interface, CAN bus interface and optical isolation circuit modules. The main design of the CAN bus adapter, which consists of single chip microcomputer, USB interface chip, CANcontroller, CAN transceiver, optoelectronic isolating device and so on, is finished. The circuit design and corresponding programdesign of each module are carried out.Key words: CAN bus; USB bus; adapter; optical isolation1 CAN 总线1.1 CAN 总线的应用CAN 总线适配器应用领域广泛,在建筑工程机械传感器、医疗化工设备温度传感采样分析处理器模块以及汽车ECU 开发等中都有应用。
剖析LPC2119USB-CAN连接器电路设计方案目前在以计算机为上位机的应用领域,都首选USB 口作为计算机与外设的接口。
由于CAN 总线具有可靠性高、功能完善、成本合理、实时性等优点,被广泛应用于各个自动化控制系统中,CAN 总线是国际上应用最广泛的现场总线之一。
为了更好的将USB 的通用性和CAN 的专业性结合起来,通过计算机的USB 接口接入CAN 专业网络,实现系统控制的便利性和应用的高效性。
本文讲述了一种基于ARM7 处理器实现USB 接口与CAN 总线的实例,通过其可以在PC 实现对CAN 总线上设备的监控。
处理器简介及其外围电路LPC2119 是基于一个支持实时仿真和跟踪的16/32 位ARM7TDMI- STM CPU,并带有128 KB 嵌入的高速FLASH($44.9500)存储器。
128 位宽度的存储器接口和独特的加速结构使32 位代码能够在最大时钟速率下运行。
对代码规模有严格控制的应用可使用16 位Thumb($66.9600)模式将代码规模降低超过30%,而性能的损失却很小。
实行流水线作业,提供Embedded($474.0000)ICE 逻辑,支持片上断点和调试点,具有先进的软件开发和调试环境。
LPC2119 具有非常小的64 脚封装、极低的功耗、多个32 位定时器、4 路10 位ADC、2 路CAN、PWM 通道、多个串行接口,包括2 个16C550 工业标准UART、高速I2C 接口和2 个SPI 接口,46 个GPIO 以及多达9 个外部中断,特别适用于汽车、工业控制应用以及医疗系统和容错维护总线。
LPC2119 内部集成2 个CAN 控制器,每一个CAN 控制器都与独立CAN 控制器SJA1000($2.8080)有着相似的寄存器结构。
它的主要特性有:单个总线上的数据传输速率高达1 Mb/s;32 位寄存器和RAM 访问;兼容。
USB/CAN通信转换器设计方案本文阐述了一种USB-CAN总线转换装置,方便CAN总线与计算机进行链接。
本设计方案主要包括:任务说明、总线简介、硬件设计、软件设计、总结等5部分。
一、任务说明设计一种USB-CAN总线转换器。
完成从一台计算机的USB把1个数据帧(自己定义)通过USB/CAN转换器将数据发到CAN总线上;另一台计算机CAN/USB转换接受数据。
二、总线介绍CAN总线是一种流行的现场总线,其协议分为物理层和数据链路层。
物理层定义信号如何发送,涉及位编码,位定时和同步,没有定义驱动器和接收器的特性,以便根据具体情况灵活应用。
数据链路层又包括媒体访问子层MAC层和逻辑链路子层LLC层。
MAC子层是CAN协议的核心,它可响应报文帧,仲裁,应答,错误检测和标定。
LLC子层主要功能是报文滤波,超载通知和恢复管理。
CAN总线主要有以下特点:1. 以多主方式工作,没有主节点和从节点之分;2. 节点信息分为不同优先级,可满足不同实时要求;3. 采用非破坏性总线仲裁技术,不同于以太网的碰撞检测技术,而是按位对标识符进行仲裁,优先级最高的节点获得总线的使用权;4. 采用报文滤波实现多种通信方式,无需专门调度。
在验收滤波器的帮助下,CAN节点只接收识别码与验收滤波器中预设值一致的信息;5. 直接通信距离最远达到10km(5kbps以下),通信速率最高可达1Mbps(通信距离最长为40m);6. CAN报文数据帧由7个不同的位场组成,即帧起始,仲裁场,控制场,数据场,CRC校验场,ACK应答场和帧结束。
仲裁场包括标识符(11位或29位),控制场包括数据场的字节数目,数据场可包括0~8个字节;7. CAN总线协议固化在相关芯片中,主要有总线控制器和总线收发器。
前者完成CAN总线协议中物理层和数据链路层中所有功能,后者提供总线驱动能力。
图2:CAN总线接口设计四、系统软件设计设备程序主要包括:初始化程序,前台主程序循环,相关通信子程序,后台中断服务程序等组成。
基于CH341的USB—CAN适配器设计作者:浣上来源:《现代电子技术》2012年第18期摘要:为便捷上位机访问工业现场CAN总线,提出了一种便携式即插即用的适配器设计方案。
该适配器采用CH341作为USB总线转接芯片,直接把USB总线协议转化为并口协议;选用SJA1000芯片作为CAN控制器,支持CAN2.0B协议,以适应不同的CAN总线需求。
系统从USB端口取电,且无需MCU/DSP介入,简化了电路结构;利用CH341主动并口功能,经相应的控制时序逻辑转换,上位机即可驱动SJA1000,进行CAN总线访问。
该适配器支持上位机自主配置,灵活强,可靠性高。
经实验测试,适配器支持访问不同的CAN 总线网,速率可达1Mb/s。
关键词:CH341;;适配器;SJA1000中图分类号:文献标识码:A文章编号:(2012)19CAN总线以其突出的可靠性、实时性和灵活性,在控制领域获得广泛的应用。
当上位计算机访问CAN总线终端设备时,一般采用基于PCI总线的CAN接口卡,但是该方法不支持即插即用,且需配备专用的计算机;或是借助MCU,DSP等CPU模块进行数据中转处理。
若CAN适配器通过USB接口驱动CAN控制器直接访问CAN总线网,则支持热插拔和通用上位机,为测试和访问CAN总线网,提供了一种便捷的解决方案。
1设计目标适配器支持即插即用,上位机可自主配置、访问CAN总线;适配器无需MCU,DSP等CPU介入,体积小巧,便携式设计,有广泛的适应性;提供Windows平台下适配器驱动的API函数。
2硬件实现适配器选用SJA1000芯片作为CAN控制器,该芯片支持CAN2.0B协议,有BasicCAN和PeliCAN两种工作模式,分别支持11位和29位地址识别码,通信速率可达到1Mb/s,可满足不同CAN网接入需求。
选用南京沁恒公司的CH341作为USB总线的转接芯片,该芯片通过USB总线不仅提供异步串口、打印口、并口,还提供常用的2线和4线等同步串行接口[3]。
基于USB接口的CAN总线适配器设计作者:王林泓蔡运富来源:《数字技术与应用》2011年第01期摘要:CAN总线技术是一种较实用的现场总线技术,但CAN总线往往不能直接与计算机进行通信。
USB作为一种通用的即插即用接口,因其具有简单易用、速度快等特点而倍受青睐。
本文设计了一种基于USB 接口的CAN总线转接模块,阐述了系统的硬件构成、固件开发以及驱动程序的设计方法。
实验测试表明:所设计的基于USB接口的CAN总线适配器性能稳定可靠,可以很好的实现CAN总线与计算机的接口通信。
关键词:USB接口 CAN总线固件开发 USB驱动开发中图分类号:TP336 文献标识码:A 文章编号:1007-9416(2011)01-0037-021、引言CAN(Controller area network)总线是20世纪80年代初德国Bosch公司为解决现代汽车中控制与测试之间的数据交换而开发的一种串行数据通信协议。
由于较好的解决了现场实际环境中数据的高速通信以及抗干扰等问题,而被广泛应用于工业现场和汽车电子等领域[1-4]。
对于计算机系统,由于大多没有CAN总线接口,因此不能直接获得工业现场CAN总线设备的数据。
传统的方法都是采用基于PCI总线的CAN转接卡实现对远端CAN总线设备的控制操作。
但是该方法不能实现即插即用,并且插卡操作需要打开机箱。
另外,CAN总线的数据通信也必须与配有PCI转CAN总线接口的计算机才能完成,切换计算机比较繁琐。
而USB 具有使用简单、即插即用、热插拔、开放性、高速、稳定、可靠性高等优点,特别适用于仪器仪表、虚拟仪器、数据采集设备、监控设备和加密设备等场合。
因此可以采用USB接口实现CAN总线设备与PC机的数据通信,使CAN总线的数据接入PC机变得更简便。
2、CAN总线适配器的硬件设计CAN总线适配器电路主要由微控制器C8051F340、CPLD时序电路、CAN总线接口芯片、DC-DC隔离保护电路组成。
基于USB的CAN总线适配器设计现场总线作为二十世纪80 年代发展起来的新兴技术,在工业现场已有了广泛的应用。
在比较有影响力的几种现场总线中,CAN 总线以其突出的优点不仅大量应用于工业现场,而且在楼宇自动化、智能终端设备等民用领域也有了长足的发展。
现场总线网络技术的实现需要与计算机相结合。
以往CAN 总线网络与计算机的连接采用RS232、ISA 或PCI 接口。
但是随着计算机接口技术的发展,ISA 接口已经逐渐被淘汰;RS232 接口数据传输率太低;PCI 虽然仍是高速外设与计算机接口的主要渠道,但其主要缺点是占用有限的系统资源、设计复杂、需有高质量的驱动程序保证系统的稳定,且无法用于便携式计算机的扩展。
随着USB1.1、USB2.0 规范的相继制定,为外设与计算机的接口提出了新的发展方向。
USB 的主要特点有:外设安装简单,可实现热插拨;通讯速率高,USB1.1 全速传送速率为12Mbps,与标准串行端口相比,大约快100 倍;支持多设备连接;提供内置电源。
本文给出一种在Windows2000 下使用USB1.1 协议实现CAN 总线适配器的设计方法。
整个设计主要开发适配器的固件及计算机的驱动程序、应用程序,以达到用USB 接口连接现场CAN 总线网络的目的。
1 适配器硬件接口设计适配器硬件电路由微控制器、CAN 总线接口、USB 总线接口和DC-DC 隔离电源模块等组成。
原理框图如图1 所示。
微控制器P89C51RD2 是Philips 公司生产的增强型MCS-51 兼容单片机,片内集成64KB 闪存和1KB 扩展RAM,双数据指针,4 级中断优先级,7 个中断内置看门狗,可编程时钟输出,在6 时钟模式下工作,速度是标准51 单片机的两倍。
此时外部最高频率可达20MHz。
在高速、大程序容量、中小规模数据处理场合是一款非常理想的单片机型。
CAN 总线接口使用Philips 公司的独立CAN 总线控制器SJA1000,并由光耦6N136 进行总线隔离。
基于USB的CAN总线适配器设计07自动化4班梁海森(200730460411)邝巨泉(200730460409)1、摘要随着现场总线技术和计算机外设接口技术的发展,现场总线与计算机快速有效的连接又有了更多的方案,USB作为一种新型的接口技术,以其简单易用、速度快等特点而备受青睐。
本文简要提出了USB 接口与CAN总线连接方案,论述了系统的硬件构成,固件开发和驱动程序等内容。
关键词:现场总线 USB CAN总线2、引言现场总线作为二十世纪80年代发展起来的新兴技术,在工业现场已有了广泛的应用。
随着信息技术的飞速发展,各种数据的实时采集和处理在现代工业控制中已成为必不可少的部分。
这要求我们设计的接口简单灵活且具有较高的数据传输率。
现场总线是连接智能现场设备和自动化系统的数字式、双向传输、多分支结构的通信网络。
如何将其与PC机安全可靠低成本的互连,是一个亟待解决的问题。
传统的外设与主机的通信接口难以满足上述要求。
这些接口一般采用PCI 总线或RS-232串行总线。
PCI总线虽然有很高的传输率(可达132Mbps),但是它们的扩充槽相当有限,且设计复杂。
RS-232串行总线连接方便,可是它的带宽非常有限,传输速度慢。
USB技术正是顺应这一要求提出的一种快速的,双向的,同步传输的,廉价的并可以进行热插拔的通用串行总线。
它还提供了内置电源,可向低压设备提供5伏的电源。
正是由于USB的这些特点,使其获得了广泛的应用。
CAN总线是现场总线的一种有效支持分布式控制或实时控制的串行通信网络,具有卓越的特性和极高的可靠性,特别适合工业过程监控设备的互连,被公认为几种最有前途的现场设备总线之一。
整个系统设计目的就是设计一个适配器,可以将CAN总线数据通过USB接口迅速转送到PC机进行处理分析,也可以通过它向CAN节点传送数据或命令,以实现计算机与现场设备的通讯。
3、硬件电路的设计该系统主要由AT89C52控制电路、USB 接口电路、CAN总线电路、挂起复位电路、光电隔离电路等组成,本设计系统主要部件结构图如下:图1 硬件电路结构图图2 硬件仿真原理图3.1 AT89C52控制电路AT89C52 是一个低电压,高性能CMOS 8位单片机,片内置8k bytes的可反复擦写的Flash存储单元和256 bytes的随机存取数据存储器(RAM),功能强大。
89C52是该接口电路的控制核心,其中P0,P2口用做16位数据I/O口,P1,P3口用做控制。
3.2 CAN总线在本系统中,CAN控制器采用Philips公司生产的SJA1000,它作为一个发送、接受缓冲器,实现主控制器和总线之间的数据传输;CAN收发器采用TJA1050芯片,它是CAN控制器和物理总线的接口,主要可以提供对总线的差动发送能力和对CAN控制器的差动接受能力。
在CAN总线结构中,总线的两端还要配置两个120Ω的电阻,其作用是总线匹配阻抗,可以增加总线传输的稳定性和抗干扰能力,减少数据传输中的出错率。
为了增强CAN总线节点的抗干扰能力,SJA1000的TXO和RX0可通过高速光耦6N137与TJA1050相连,这样就很好的实现了总线上各节点的电气隔离。
光耦部分电源与CAN_V必须用小功率电源隔离模块进行隔离,这样就提高了节点的稳定性和安全性。
3.3 USB接口本设计中的PDIUSBD12是一个性能优化的USB器件,通常用于基于微控制器的系统并与微控制器通过高速通用并行接口进行通信。
PDIUSBD12与MCU的接口有2种方式:多路地址/数据总线方式、单地址/数据总线方式。
在这个系统中,我们采用的是前一种方式:使用了AT89C52的INT0、ALE、WR、RD和P0口,A0 脚接地,当PDIUSBD12接收到主机的有效信息时,会产生一个中断通知89C52进行处理。
若单片机的输出地址为奇数,则表示对PDIUSBD12发送指令;若输出地址为偶数,则表示对PDIUSBD12进行数据传输。
AT89C52将数据经PDIUSBD12的并行接口送入FIFO存储器。
对一个单片机而言,PDIUSBD12看起来就像1个带8位数据总线和1个地址位的存储器件。
控制CLKOUT 时钟输出为SJA1000提供时钟输入。
由于在USB的信号传递过程中会掺杂进瞬间的高压噪声,这些噪声对USB口的收发电路将产生致命的危害,因此需要对这些噪声电压进行抑制。
在USB接口电路中使用了SN75240,它可以对USB接口中的不正常电压进行有效的抑制,以保证硬件设备的安全。
4、微控制器的固件编程4.1 CAN总线的软件设计CAN总线的三层结构模型为:物理层、数据链路层和应用层。
其中物理层和数据链路层的功能由SJA1000完成,系统的开发主要在应用层软件的设计上,它主要由三个子程序:初始化子程序、发送数据和接收数据程序。
同时,还包括一些数据溢出中断以及帧出错的处理。
SJA1000在上电硬件复位之后,必须对其进行软件初始化之后才可以进行数据通讯,初始化过程主要包括对其复位模式下配置时钟分频寄存器CDR、总线定时寄存器BTR0和BTR1、验收代码寄存器ACR、验收屏蔽寄存器AMR及输出控制寄存器OCR等,实现对总线的速率、验收屏蔽码、输出引脚驱动方式、总线模式及时钟分频进行定义。
下面为SJA1000发送和接收数据的流程,基本过程为主控制器将数据保存到SJA1000发送缓冲器,然后对命令寄存器的发送请求TR标志位进行置位开始发送;接收过程为SJA1000将从总线上接收到的数据存入接收缓冲器,通过其中断标志位通知主控制器来处理接收到的信息,接收完毕之后清空缓冲器,等待下次接收[3]。
图3 CAN的发送数据流程图4 CAN接收数据的流程图发送数据子程序代码(例):int can_tran_file(int id ,char *f){void far *ptr;char ch;int i,j,re_comd,length;FILE *fp;get_ram_access_right(); /*获得双口RAM控制权*/ptr=MK-FP(oxd000,0); /*将命令、文件名、文件长度和文件内存入双口RAM*/FP_OFF(ptr)+=ox100;pokeb(FP_SEG(ptr),FP_OFF(ptr),02);FP_OFF(ptr)++;pokeb(FP SEG(ptr),FP OFF(ptr),id);FP_OFF(ptr)++;pokeb(FP_SEG(ptr),FP_OFF(ptr),1);FP_OFF(ptr)++;i=0;while(f[i]!='\0'){pokeb(FP_SEG(ptr),FP_OFF(ptr),f[i]);FP_OFF(ptr)++;i++;}pokeb(FP_SEG(ptr),FP_OFF(ptr),f[i]);ptr=MK_FP(oxd000,0);FP_OFF(ptr)+=ox120;if(!(fp=fopen(f,"rb"))){release_ram_acces_right();return(6);}i=0;while(!feof(fp)){fread(&ch,sizeof(char),1,fp);pokeb(FP_SEG(ptr),FP_OFF(ptr),ch);FP_OFF(ptr)++;i++;}fclose(fp);length=i-1;ptr=MK_FP(oxd000,0);FP_OFF(ptr)+=0x114;poke(FP_SEG(ptr),FP_OFF(ptr),length);release_ram_acces_right(); /*释放双口RAM控制权*/inportb(0x218); /*延时*/for(i=0;i<6000;i++)ch='0'; /*获得双口RAM控制权*/get_ram_access_right();prt=MK_FP(oxd000,0);FP_OFF(ptr)+=ox4000;re_comd=peekb(FP_SEG(ptr),FP_OFF(ptr));if(re_comd==0x12){ /*查询传送文件是否成功*/ pokeb(FP_SEG(ptr),FP_OFF(ptr),0);release_ram_acces_right();return(1); /*传送成功,返回1*/}else{ptr=MK_FP(oxd000,0);FP_OFF(ptr)+=ox4020;i=peekb(FP_SEG(ptr),FP_OFF(ptr));release_ram_acces_right();return(i);}}接收数据子程序代码(例):int can_recv_file(int id,char *f){void fra *ptr;char ch;int i,j,re_comd,length;file *fp;get_ram_access_right();/*得到双口ram控制权*/ ptr=mk_fp(oxd000,0);fp_off(ptr)+=ox100;pokeb(fp_seg(ptr),fp_off(ptr),01);fp_off(ptr)++;pokeb(fp_seg(ptr),fp_off(ptr),id);fp_off(ptr)++;pokeb(fp_seg(ptr),fp_pff(ptr),1);fp_off(ptr)++;i=0;while(f[i]!='\0'){pokeb(fp_seg(ptr),fp_off(ptr),f[i]);fp_off(ptr)++;i++;}pokeb(fp_seg(ptr),fp_off(ptr),f[i]);release_ram_acces_right();/*释放双口ram控制权*/ inportb(ox218);for(i=0;i<6000;i++)ch='0';get_ram_access_right(); /*得到双口ram控制权*/ptr=mk_fp(oxd000,0);fp_off(ptr)+=ox4000;re_comd=peekb(fp_seg(ptr),fp_off(ptr));if(re_comd==ox11){ pokeb(fp_seg(ptr),fp_off(ptr),0);if(!(fp=fopen(f,"wb"))){ release_ram_accea_right(); /*释放双口ram控制权*/ return(6);}ptr=mk_fp(oxd000,0);fp_off(ptr)+=ox4014;lenght=peek(fp_seg(ptr),fp_off(ptr));ptr=mk_fp(oxd000,0);fp_off(ptr)+=ox4020;fwrite(ptr,sizeof(char),length,fp);fclose(fp);release_ram_acces_right();return(1); } /*接收成功,返回1*/else{ ptr=mk_fp(oxd000,0);fp_off(ptr)+=ox4020;i=peekb(fp_seg(ptr),fp_off(ptr));release_ram_acces_right();return(i);/*接收失败,返回出错内容*/}}CAN初始化程序:void init_can()large{unsigned int data i;for (i=0;i<512;i++){ _nop_()}con_reg=ox41; /*设置软件复位*/for(i=0;i<512;i++){ _nop_() }cpu_inter_reg=ox41; /*设置cpu接口reg*/clk_out_reg=ox30;bus_config_reg=0;g_m_s_reg0=oxff; /*设置标准标识符屏蔽reg*/g_m_s_reg1=ox1f;g_m_e_reg0=oxff;g_m_e_reg1=oxff;g_m_e_reg2=oxff;g_e_s_reg3=oxff;m15_m_reg0=oxff;/*设置15号信息块*/m15_m_reg1=ox1f;m15_m_reg2=oxff;m15_m_reg3=oxff;tim0_reg=ox87;tim1_reg=oxc8;mesg_reg10=ox55;/*设置1到15好信息块的控制reg*/ mesg_reg20=ox55;mesg_reg30=ox55;mesg_reg40=ox55;mesg_reg50=ox55;mesg_reg60=ox55;mesg_reg70=ox55;mesg_reg80=ox55;mesg_reg90=ox55;mesg_rega0=ox55;mesg_regb0=ox55;mesg_regc0=ox55;mesg_regd0=ox55;mesg_rege0=ox55;mesg_regf0=ox55;mesg_reg16=ox88;/*将1号信息块设置成传输方式*/mesg_reg12=oxf3;mesg_reg13=0;mesg_reg14=0;mesg_reg15=0;mesg_reg10=ox95;mesg_reg26=ox80;/*将2号信息块设置成接收方式*/mesg_reg22=oxf0;mesg_reg24=0;mesg_reg25=0;mesg_reg21=ox55;mesg_reg20=ox99;mesg_regf6=ox80;/*将15号信息块设置成接收方式*/mesg_regf1=ox55;mesg_regf0=ox99;con_reg=ox02;/*设置控制reg*/}5、 USB总线的软件设计1、USB驱动程序设计:在Windows环境下,不允许用户在应用程序中直接访问硬件设备,应用程序必须通过一个中间桥梁才能访问硬件设备,这个中间桥梁就是设备驱动程序。