为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

单片机读写U盘

2011-03-03 39页 doc 654KB 34阅读

用户头像

is_331502

暂无简介

举报
单片机读写U盘浙江科技学院 1前言 随着计算机技术的快速发展,USB(Universal Serial Bus)存储设备的使用已经非常普遍,USB用于将适用USB的外围设备(device)连接到主机(host),实现二者之间数据传输的外部总线结构;是一种快速、灵活的总线接口[5]。它最大的特点是易于使用,主要是用在中速和低速的外设。随着USB规范的完善和成熟,USB外设的种类不断丰富,应用领域也不断扩大。在传统的应用中,主要是PC扮演着主机的角色。根据USB的规范,可以看到在USB的拓朴结构中居于核心地位的是主机,每一次的数据传输都必须由主...
单片机读写U盘
浙江科技学院 1前言 随着计算机技术的快速发展,USB(Universal Serial Bus)存储设备的使用已经非常普遍,USB用于将适用USB的外围设备(device)连接到主机(host),实现二者之间数据传输的外部总线结构;是一种快速、灵活的总线接口[5]。它最大的特点是易于使用,主要是用在中速和低速的外设。随着USB规范的完善和成熟,USB外设的种类不断丰富,应用领域也不断扩大。在传统的应用中,主要是PC扮演着主机的角色。根据USB的规范,可以看到在USB的拓朴结构中居于核心地位的是主机,每一次的数据传输都必须由主机发起和控制。但是随着单片机产品应用领域的日益增长,USB外设的应用范围也随之扩大,为此在单片机系统中实现对USB外设控制也变得日益迫切。因此在一些需要转存数据的设备,仪器上使用USB移动存储设备接口的芯片便相继产生了,CH375就是其中之一,它是一个USB总线的通用接口芯片,支持HOST主机方式和SLAVE设备方式[4]. 如今的USB就象当日的R232,最终发展必是业界的主流外设接口技术。USB有着其它接口不可替代的优势[12]. 随着USB技术的发展,计算机的移动存储介质普遍采用U盘或移动硬盘。 如今,USB技术已经越来越普及和成熟,低成本、高稳定性、较高的数据传输速率和即插即用的方便性,使其备受硬件厂商的青睐。随着数据采集和单片机用户对移动存储的需求越来越大,具有USB接口的存储设备以其优异的性价比和灵活性常用来进行数据的存储和交换,所以在单片机系统中实现对优盘或移动硬盘的直接读写是非常有价值的[6]。 介绍了一种USB总线的通用接口芯片CH375,并在此基础上提出了一种外部单片机读写U盘的基本方法及其硬件连接方法。单片机只要在原硬件系统中增加1个CH375芯片就可以直接调用CH375提供的子程序库来直接读取U盘中的数据,从而实现了普通单片机与U盘的通讯、方法简单、便于操作、综合成本比较低,具有较大的推广应用价值[10]。 2 总体 2.1 电路原理图 图1 MCS-51单片机读写U盘的电路原理图 MCS-51单片机读写U盘的电路原理图,CH375芯片的TXD引脚接高电平,工作于串口方式。在串口方式下,CH375只需要与单片机/DSP/MCU连接3个信号线,TXD引脚、RXD引脚以及INT#引脚,其他引脚都可以悬空。除了连接线较少之外,其他外围电路与并口方式基本相同。由于INT#引脚和TXD 引脚在CH375复位期间只能提供微弱的高电平输出电流,在进行较远距离的连接时,为了避免INT#或者TXD在CH375复位期间受到干扰而导致单片机误操作,可以在INT#引脚或者TXD引脚上加阻值为1~5kΩ的上拉电阻,以维持较稳定的高电平。在CH375芯片复位完成后,INT#引脚和TXD引脚将能够提供5mA的高电平输出电流或者5mA的低电平吸入电流。 2.2 硬件结构 CH375工作于并口方式,与普通的MCS-5l单片机的连接如图所示。CH375的TXD引脚通过l kΩ左右的下拉电阻接地或者直接接地,从而使CH375工作于并口方式。 图2 硬件结构图 2.3 软件设计 ①进入USB主机模式,要读/写U盘,必须先设置CH375使其工作于USB主机方式。②将U盘当作存储器进行读/写,方法与读/写闪存差不多,操作简单且速度快。单片机读/写U盘文件程序分层如图所示。 图3 单片机读/写U盘文件程序分层图 2.4 软件设计流程图 图4 软件设计流程图 3 51单片机的结构及组成 3.1 51单片机的内部结构 1、​ 中央处理单元(8位) 数据处理、测试位,置位,复位 位操作 2、只读存储器(4KB或8KB) 永久性存储应用程序,掩模ROM、EPROM、EEPROM 3、​ 随机存取内存(128B、128B SFR) 在程序运行时存储工作变量和资料 4、并行输入/输出口(I / O)(32条) 作系统总线、扩展外存、I / O接口芯片 5、串行输入/输出口(2条) 串行通信、扩展I / O接口芯片 6、定时/计数器(16位、加1计数) 计满溢出、中断标志置位、向CPU提出中断请求,与CPU之间独立工作 7、时钟电路 内振、外振。 8、中断系统 五源中断、2级优先。 3.2 51单片机的结构特点 MCS-51系列单片机为哈佛结构(而非普林斯顿结构) 1)内ROM:4KB 2)内RAM:128B 3)外ROM:64KB 4)外RAM:64KB 5)I / O线: 32根(4埠,每埠8根) 6)定时/计数器:2个16位可编程定时/计数器 7)串行口:全双工,2 根 8)寄存器区:工作寄存器区、在内128B RAM中,分4个区, 9)中断源:5源中断,2级优先 10)堆栈:最深128B 11)布尔处理机:位处理机,某位单独处理 12)指令系统:五大类,111条 图5 MCS-51单片机结构框图 3.3 MCS-51的CPU的组成 MCS-51的CPU能处理8位二进制数或代码。CPU是单片机的主要核心部件,在CPU里面包含了运算器、控制器以及若干寄存器等部件给成。 ⑴内部数据存储器(RAM): MCS-51单片机芯片共有256个RAM单元,其中后128单元被专用寄存器占用,能作为寄存器供用户使用的只是前128单元,用于存放可读写的数据。因此通常所说的内部数据存储器就是指前128单元,简称内部RAM。地址范围为00H~FFH(256B)。是一个多用多功能数据存储器,有数据存储、通用工作寄存器、堆栈、位地址等空间。 ⑵内部程序存储器(ROM): MCS-51内部有4KB/8KB字节的ROM(51系列为4KB,51系列为8KB),用于存放程序、原始数据或表格。因此称之为程序存储器,简称内部RAM。地址范围为0000H~FFFFH(64KB)。 ⑶定时器/计数器 51系列共有2个16位的定时器/计数器(52系列共有3个16位的定时器/计数器),以实现定时或计数功能,并以其定时或计数结果对计算机进行控制。定时时靠内部分频时钟频率计数实现,做计数器时,对P3.4(T0)或P3.5(T1)端口的低电平脉冲计数。 ⑷并行I/O口 MCS-51共有4个8位的I/O口(P0、P1、P2、P3)以实现数据的输入输出。 ⑸串行口 MCS-51有一个可编程的全双工的串行口,以实现单片机和其它设备之间的串行数据传送。该串行口功能较强,既可作为全双工异步通信收发器使用,也可作为移位器使用。RXD( P3.0)脚为接收端口,TXD(P3.1)脚为发送端口。 ⑹中断控制系统 MCS-51单片机的中断功能较强,以满足不同控制应用的需要。51系列有5个中断源(52系列有6个中断源),即外中断2个,定时中断2个,串行中断1个,全部中断分为高级和低级共二个优先级别。 ⑺定时与控制部件 MCS-51单片机内部有一个高增益的反相放大器,基输入端为XTAL1输出端为XTAL2。MCS-51芯片的内部有时钟电路,但石英晶体和微调电容需外接。时钟电路为单片机产生时钟脉冲序列。 4 USB总线接口芯片CH375 4.1 概述[1] CH375 是一个USB总线的通用接口芯片,支持USB-HOST主机方式和USB-DEVICE/SLAVE设备方式。在本地端,CH375具有8位数据总线和读、写、片选控制线以及中断输出,可以方便地挂接到单片机/DSP/MCU/MPU等控制器的系统总线上。在USB主机方式下,CH375还提供了串行通讯方式,通过串行输入、串行输出和中断输出与单片机/DSP/MCU/MPU 等相连接。 CH375的USB 主机方式支持常用的USB 全速设备,外部单片机可以通过CH375 按照相应的USB 与USB 设备通讯。CH375 还内置了处理Mass-Storage 海量存储设备的专用通讯协议的固件,外部单片机可以直接以扇区为基本单位读写常用的USB 存储设备(包括USB 硬盘/USB 闪存盘/U 盘) 4.2 特点 ● 全速USB-HOST 主机接口,兼容USB V2.0,外围元器件只需要晶体和电容。 ● 全速设备接口,完全兼容CH372 芯片,支持动态切换主机与设备方式。 ● 主机端点输入和输出缓冲区各64 字节,支持常用的12Mbps 全速USB 设备。 ● 支持USB 设备的控制传输、批量传输、中断传输。 ● 自动检测USB 设备的连接和断开,提供设备连接和断开的事件。 ● 内置控制传输的协议处理器,简化常用的控制传输。 ● 内置固件处理海量存储设备的专用通讯协议,支持Bulk-Only传输协议和SCSI、UFI、RBC 或等效命令集的USB 存储设备(包括USB 硬盘/USB 闪存盘/U 盘)。 ● 通过U 盘文件级子程序库实现单片机读写USB 存储设备中的文件。 ● 并行接口包含8 位数据总线,4 线控制:读选通、写选通、片选输入、中断输出。 ● 串行接口包含串行输入、串行输出、中断输出,支持通讯波特率动态调整。 ● 支持5V 电源电压和3.3V 电源电压,CH375A 芯片还支持低功耗模式。 ● 采用SOP-28 封装,可以提供SOP28 到DIP28 的转换板。 4.3封装 4.4引脚 4.5 功能说明 4.5.1 一般说明 CH375 芯片可以工作于USB-HOST 主机方式或者USB 设备方式。 CH375的USB 主机方式支持并行接口和串行接口。在USB主机方式下,CH375支持各种常用的USB全速设备,外部单片机需要编写固件程序按照相应的USB协议与USB 设备通讯。但是对于USB 存储设备,CH375 内置了相关协议,通常情况下,外部单片机不需要编写固件程序,就可以直接通讯。 4.5.2 本地端的硬件 CH375 芯片在本地端提供了通用的被动并行接口和点对点的串行接口。 4.5.2.1 并行接口 并口信号线包括:8 位双向数据总线D7~D0、读选通输入引脚RD#、写选通输入引脚WR#、片选输入引脚CS#、中断输出引脚INT#以及地址输入引脚A0。通过被动并行接口,CH375芯片可以很方便地挂接到各种8 位单片机、DSP、MCU 的系统总线上,并且可以与多个外围器件共存。 CH375芯片的RD#和WR#可以分别连接到单片机的读选通输出引脚和写选通输出引脚。CS#由地址译码电路驱动,用于当单片机具有多个外围器件时进行设备选择。INT#输出的中断请求是低电平有效,可以连接到单片机的中断输入引脚或者普通I/O 引脚,单片机可以使用中断方式或者查询方式获知中断请求。 当WR#为高电平并且CS#和RD#及A0 都为低电平时,CH375 中的数据通过D7~D0输出;当RD#为高电平并且CS#和WR#及A0 都为低电平时,D7~D0上的数据被写入CH375 芯片中;当RD#为高电平并且CS#和WR#都为低电平而A0 为高电平时,D7~D0 上的数据被作为命令码写入CH375 芯片中。 4.5.2.2 串行接口 串行接口只能用于USB 主机方式,CH375 芯片的USB 设备方式不支持串口。 串口信号线包括:串行数据输入引脚RXD、串行数据输出引脚TXD、中断输出引脚INT#。通过串行接口,CH375 可以用最少的连线与单片机、DSP、MCU 进行较远距离的点对点连接。 CH375芯片的RXD 和TXD可以分别连接到单片机的串行数据输出引脚和串行数据输入引脚。INT#输出的中断请求是低电平有效,用于通知单片机。 CH375 的串行数据格式是1个起始位、9个数据位、1个停止位,其中前8个数据位是一个字节数据,最后1个数据位是命令标志位。第9位为0时,前8位的数据被写入CH375芯片中,第9位为1时,前8位被作为命令码写入CH375芯片中。CH375的串行通讯波特率默认是9600bps,单片机可以随时通过SET_BAUDRATE 命令选择合适的通讯波特率。 4.5.2.3 其它 在CH375 芯片的复位期间,TXD引脚用于选择通讯接口。如果CH375 在复位期间检测到TXD引脚为低电平则启用并行接口,否则启用串行接口。如果启用串行接口,那么复位完成后TXD 引脚将用于串行数据输出,并且CH375 芯片只能工作于USB 主机方式。 CH375芯片的ACT#引脚用于状态指示。在内置固件的USB设备方式下,当USB 设备尚未配置或者取消配置后,该引脚输出高电平;当USB 设备配置完成后,该引脚输出低电平。对于CH375A 芯片,在USB主机方式下,当USB 设备断开后,该引脚输出高电平;当USB设备连接后,该引脚输出低电平。CH375 的ACT#引脚可以外接串了限流电阻的发光二级管LED,用于指示相关的状态。 CH375 芯片的UD+和UD-引脚是USB 信号线,工作于USB 设备方式时,应该直接连接到USB 总线上;工作于USB 主机方式时,可以直接连接到USB设备。如果为了芯片安全而串接保险电阻或者电感,那么交直流等效串联电阻应该在5Ω之内。 CH375芯片内置了电源上电复位电路,一般情况下,不需要外部提供复位。RSTI 引脚用于从外部输入异步复位信号;当RSTI 引脚为高电平时,CH375芯片被复位;当RSTI 引脚恢复为低电平后,CH375会继续延时复位20mS 左右,然后进入正常工作状态。为了在电源上电期间可靠复位并且减少外部干扰,可以在RSTI引脚与VCC 之间跨接一个容量为0.47uF 左右的电容。RST引脚和RST#引脚是复位状态输出引脚,分别是高电平有效和低电平有效;当CH375电源上电复位或者被外部强制复位以及复位延时期间,RST 引脚和RST#引脚分别输出高电平和低电平;CH375复位完成后,RST 引脚和RST#引脚分别恢复到低电平和高电平。RST 和RST#引脚可以用于向外部单片机提供上电复位信号。 CH375芯片正常工作时需要外部为其提供12MHz 的时钟信号。一般情况下,时钟信号由CH375内置的反相器通过晶体稳频振荡产生。外围电路只需要在XI 和XO 引脚之间连接一个标称频率为12MHz的晶体,并且分别为XI 和XO 引脚对地连接一个高频振荡电容。如果从外部直接输入12MHz时钟信号,那么应该从XI 引脚输入,而XO 引脚悬空。 CH375芯片支持5V电源电压或者3.3V 电源电压。当使用5V 工作电压时,CH375 芯片的VCC 引脚输入外部5V 电源,并且V3 引脚应该外接容量为0.01uF 左右的电源退耦电容。当使用3.3V 工作电压时,CH375 芯片的V3引脚应该与VCC引脚相连接,同时输入外部的3.3V 电源,并且与CH375 芯片相连接的其它电路的工作电压不能超过3.3V 4.5.3 内部结构 CH375 芯片内部集成了PLL 倍频器、主从USB 接口SIE、数据缓冲区、被动并行接口、异步串行接口、命令解释器、控制传输的协议处理器、通用的固件程序等。 PLL 倍频器用于将外部输入的12MHz 时钟倍频到48MHz,作为USB 接口SIE 时钟。 主从USB 接口SIE是USB主机方式和USB设备方式的一体式SIE,用于完成物理的USB数据接收和发送,自动处理位跟踪和同步、NRZI编码和解码、位填充、并行数据与串行数据之间的转换、CRC数据校验、事务握手、出错重试、USB 总线状态检测等。 数据缓冲区用于缓冲USB 接口SIE 收发的数据。 被动并行接口用于与外部单片机/DSP/MCU 交换数据。 异步串行接口用于代替被动并行接口与外部单片机/DSP/MCU 交换数据。 命令解释器用于分析并执行外部单片机/DSP/MCU 提交的各种命令。 控制传输的协议处理器用于自动处理常用的控制传输的多个阶段,简化外部固件编程。 通用的固件程序包含两组:一组用于USB 设备方式,自动处理USB默认端点0 的各种事务等;另一组用于USB 主机方式,自动处理Mass-Storage 海量存储设备的专用通讯协议。 CH375 芯片内部具有7 个物理端点: 端点0 是默认端点,支持上传和下传,上传和下传缓冲区各是8 个字节; 端点1包括上传端点和下传端点,上传和下传缓冲区各是8个字节,上传端点的端点号是81H,下传端点的端点号是01H; 端点2 包括上传端点和下传端点,上传和下传缓冲区各是64 个字节,上传端点的端点号是82H,下传端点的端点号是02H; 主机端点包括输出端点和输入端点,输出和输入缓冲区各是64 个字节,主机端点与端点2合用同一组缓冲区,主机端点的输出缓冲区就是端点2 的上传缓冲区,主机端点的输入 缓冲区就是端点2 的下传缓冲区。 CH375 的端点0、1、2 只用于USB 设备方式,在USB 主机方式下只需要用到主机端点。 在USB 主机方式下,CH375 支持各种常用的USB 全速设备。USB 设备的端点号可以是0~15,两个方向最多支持31 个端点,USB 设备的包长度可以是0~64 字节。 内置固件可以处理Mass-Storage 海量存储设备的通讯协议,要求USB 存储设备支持Bulk-Only传输协议,支持SCSI、UFI、RBC或者等效的命令集,并且数据端点的最大包长度是64 字节,但是默认端点0 的最大包长度可以是8、16、32 或者64 字节。如果USB 存储设备不符合上述要求,则需要外部单片机通过控制传输以及ISSUE_TOKEN 命令或者ISSUE_TKN_X 命令自行处理相关通讯协议。 下图为CH375A 芯片内部的中断逻辑图。 图6 CH375A 芯片内部的中断逻辑图 4.5.4 本地端的单片机软件 CH375芯片占用两个地址位,当A0 引脚为高电平时选择命令端口,可以写入命令;当A0引脚为低电平时选择数据端口,可以读写数据。 单片机通过8 位并口对CH375 芯片进行读写,所有操作都是由一个命令码、若干个输入数据和若干个输出数据组成,部分命令不需要输入数据,部分命令没有输出数据。命令操作步骤如下: ①、 在A0=1 时向命令端口写入命令代码; ②、 如果该命令具有输入数据,则在A0=0 时依次写入输入数据,每次一个字节; ③、 如果该命令具有输出数据,则在A0=0 时依次读取输出数据,每次一个字节; ④、 命令完成,可以暂停或者转到①继续执行下一个命令。 CH375芯片专门用于处理USB 通讯,在检测到USB 总线的状态变化时或者命令执行完成后,CH375以中断方式通知单片机进行处理。 4.6 参数 4.6.1 绝对最大值(临界或者超过绝对最大值将可能导致芯片工作不正常甚至损坏) 4.6.2 电气参数(测试条件:TA=25℃,VCC=5V,不包括连接USB 总线的引脚) (如果电源电压为3.3V,则表中所有电流参数需要乘以40%的系数) 注:ACT#引脚的低电平吸入电流为4mA,高电平输出电流为200uA。 在CH375 芯片复位期间INT#引脚和TXD 引脚只能提供80uA 的高电平输出电流。 4.6.3 时序参数(测试条件:TA=25℃,VCC=5V 或者VCC=V3=3.3V,参考附图) (RD 是指RD#信号有效并且CS#信号有效,RD#=CS#=0 执行读操作) (WR 是指WR#信号有效并且CS#信号有效,WR#=CS#=0 执行写操作) (适用于CH375A;如果是CH375S,那么TE0=TSX=TSC=TCC=2.5uS,TSD=TCD=1.5uS) 图7 5 应用 5.1 并口方式(下图) 这是CH375与普通的MCS-51 单片机的连接电路。CH375 的TXD引脚通过1KΩ左右的下拉电阻接地或者直接接地,从而使CH375 工作于并口方式。 USB 总线包括一对5V 电源线和一对数据信号线,通常,+5V 电源线是红色,接地线是黑色,D+信号线是绿色,D-信号线是白色。USB 插座P1 可以直接连接USB 设备,必要时可以在提供给USB 设备的+5V 电源线上串接具有限流作用的快速电子开关,USB 电源电压必须是5V。 电容C3 用于CH375 内部电源节点退耦,C3 是容量为0.01μF 的独石或高频瓷片电容,如果对EMI 没有要求那么可以省掉C3。电容C4和C5用于外部电源退耦,C4 是容量为0.1μF的独石或高频瓷片电容。晶体X1、电容C1 和C2 用于CH375 的时钟振荡电路。USB-HOST 主机方式要求时钟频率比较准确,X1 的频率是12MHz±0.4‰,C1 和C2 是容量约为15pF 的独石或高频瓷片电容。 如果电源上电过程较慢并且电源断电后放电时间较长,那么CH375将不能可靠复位。可以在RSTI引脚与VCC 之间跨接一个容量为0.47μF 的电容C11,同时可以减少干扰。 在设计印刷线路板PCB 时,需要注意:退耦电容C3 和C4 尽量靠近CH375 的相连引脚;使D+和D-信号线贴近平行布线,尽量在两侧提供地线或者覆铜,减少来自外界的信号干扰;尽量缩短XI 和XO 引脚相关信号线的长度,为了减少高频时钟对外界的干扰,可以在相关元器件周边环绕地线或者覆铜。 图8 并口电路图 CH375芯片具有通用的被动并行接口,可以直接连接多种单片机、DSP、MCU等。在普通的MCS-51系列单片机的典型应用电路中,CH375 芯片可以通过8 位被动并行接口的D7~D0、-RD、-WR、-CS、A0 直接挂接到单片机U2 的系统总线上。 如果MCS-51 单片机没有用U3锁存A7~A0 地址,那么可以用U2的P20 等引脚驱动CH375 的地址线A0,并且单片机程序中的端口地址需要相应修改。U4 用于简单的地址译码,产生所需的片选信号,图中CH375 芯片的片选地址范围为B000H-BFFFH,而实际上CH375 只需要占用两个地址:地址BXX1H用于写命令,地址BXX0H 用于读写数据。 5.2 串口方式(下图) 如果CH375 芯片的TXD 引脚悬空或者没有通过下拉电阻接地,那么CH375 工作于串口方式。在串口方式下,CH375只需要与单片机/DSP/MCU 连接3 个信号线,TXD 引脚、RXD 引脚以及INT#引脚,其它引脚都可以悬空。除了连接线较少之外,其它外围电路与并口方式基本相同。另外,如果需要动态修改CH375 串口的通讯波特率,那么建议由单片机的I/O 引脚控制CH375 的RSTI 引脚,便于在必要时复位CH375 以恢复到默认波特率。 由于INT#引脚和TXD 引脚在CH375 复位期间只能提供微弱的高电平输出电流,在进行较远距离的连接时,为了避免INT#或者TXD 在CH375 复位期间受到干扰而导致单片机误操作,可以在INT#引脚或者TXD 引脚上加阻值为2KΩ~5KΩ的上拉电阻,以维持较稳定的高电平。在CH375 芯片复位完成后,INT#引脚和TXD 引脚将能够提供5mA 的高电平输出电流或者5mA 的低电平吸入电流。 图9 串口电路图 5.3 单片机读写U盘文件(USB 存储设备的文件级接口) 图10 单片机读写U盘文件 一般情况下,单片机或嵌入式系统处理USB 存储设备的文件系统需要实现上图左边的4个层次,右边是USB 存储设备的内部结构层次。由于CH375 不仅是一个通用的USB-HOST 硬件接口芯片,还内置了相关的固件程序,包含了上图左边的3 个层次(标为灰色部分),所以实际的单片机程序只需要处理FAT 文件系统层,并且即使这一层也可以由CH375 的U 盘文件级子程序库实现。 如果不需要处理文件系统,也就是不处理上图左边的最顶层,那么CH375 直接提供了数据块的读写接口,以512字节的物理扇区为基本读写单位,从而将USB存储设备简化为一种外部数据存储器,单片机可以自由读写USB 存储设备中的数据,也可以自由定义其数据结构。 由于计算机将USB 存储设备组织为文件系统,为了方便单片机通过USB移动存储设备与计算机之间交换数据,单片机也可以将USB 存储设备组织为文件系统,也就是处理上图左边的最顶层。 CH375以C语言子程序库提供了USB存储设备的文件级接口,这些应用层接口API包含了常用的文件级操作,可以移植并嵌入到各种常用的单片机程序中。 CH375 的U 盘文件级子程序库具有以下特性:支持常用的FAT12、FAT16 和FAT32 文件系统,磁盘容量可达100GB 以上,支持多级子目录,支持8.3 格式的大写字母和中文文件名,可以支持小写字母或者长文件名,支持文件打开、新建、删除、读写以及搜索等。 CH375 的文件级子程序库需要大约600 字节的随机存储器RAM 作为缓冲区。以普通的MCS-51 单片机为例,文件系统的全部子程序有4KB 到8KB 代码,并且需要大约80 字节的内部RAM 和512 字节的外部RAM 作为缓冲区。有关U 盘文件级子程序库的详细信息请参考CH375 评估板的说明。 文件级子程序库的所有API 在调用后都有操作状态返回,但不一定有应答数据。有关API 参数的说明请参考CH375HF?.H,主要子程序如下: 初始化CH375 芯片:CH375Init 查询U 盘是否准备好:CH375DiskReady 查询U 盘容量:CH375DiskSize 查询U 盘信息(总容量及剩余容量):CH375DiskQuery 打开文件:CH375FileOpen 枚举或者搜索文件:CH375FileEnumer 关闭文件:CH375FileClose 新建文件:CH375FileCreate 删除文件:CH375FileErase 以扇区为单位从文件读数据:CH375FileReadX 以扇区为单位向文件写数据:CH375FileWriteX 以扇区为单位移动文件指针:CH375FileLocate 查询文件属性(属性/日期/时间/长度):CH375FileQuery 设置文件属性(属性/日期/时间/长度):CH375FileModify 以字节为单位从文件读数据:CH375ByteRead 以字节为单位向文件写数据:CH375ByteWrite 以字节为单位移动文件指针:CH375ByteLocate 5.4 U盘读写模块的并口说明 5.4.1 接口定义 模块具有两个外部接口:P1 是USB 插座,可以直接插入U 盘或者通过USB 延长线连接U 盘,当进行程序升级或者重新配置时应该通过USB 对连线连接计算机的USB端口;P2 是16脚的双排针或者插座,用于连接单片机系统。 标准版模块可以由工具软件设置,使之工作于并口方式或者串口方式。 有关串口的引脚和协议说明,请参考CH375HMS.PDF 文档。 在并口方式下,外部系统的单片机与模块的P2 端口相连接。模块可以通过8 位数据线D0-D7、读RD#、写WR#、片选CS#信号线直接挂在单片机的8位系统总线上,除此之外,模块的中断输出INT#还应该连接到单片机的一个I/O 引脚(查询方式)或者中断输入引脚(中断方式)。 模块的被动并口由双向缓冲接口芯片CH421A 提供,单片机与模块之间的数据交换在CH421A 芯片的68 字节缓冲区中进行。当单片机系统向模块读写数据时,首先应该向模块的索引端口写入索引地址0~67,然后读写数据端口,每次读写一个字节数据后,CH421A自动将索引地址加1,以便单片机直接读写下一地址的数据。详细的操作步骤及时序可以参考CH421A 芯片手册中关于X 端口的说明。 注:并口连线较长时,需要特别考虑CS#和RD#以及WR#等控制线的串扰问题,解决方法是对关键信号进行隔离和屏蔽、增加关键信号的驱动能力、减小公共地线的连接电阻等。 图 11 5.4.2 参考电路 以下参考电路都是以MCS51 单片机为例,其它类型的单片机可以参考修改。 1​ 并口连接,INT#中断通知 示例程序的应用环境就是采用这种连接方式,有关与模块连接的端口请参考连接电路图②中的P2端口。模块的INT#连接到单片机的中断引脚INT0(或者INT1),如果使用查询方式,那么可以用普通I/O 引脚代替INT0 引脚。模块的A0 可接单片机的A0 或A8。 图12 ② 并口连接,INT#查询状态 图中的P2 端口就是连接模块的端口。由于模块的CS#连接到单片机的A15引脚,所以其端口地址范围为0000H-7FFFH,如果需要连接外部RAM,那么其地址应该在8000H 以上才能避免冲突。如果不连接外部RAM,例如采用具有1KB 以上内部RAM的单片机,那么应该避免在读取内部RAM时与模块地址冲突。当然,最佳方法是参考连接电路图①由地址译码电路U3 产生模块的CS#信号。 图13 5.4.3 接口操作 基本操作步骤是,单片机系统将命令码、后续参数长度(因为各命令码所需要的参数不等长)和参数写给模块,并通知其启动操作,模块执行完成后以中断方式通知单片机,并返回操作状态和操作结果。 因为接口操作看起来比较复杂,所以实际过程可以参考随模块一起提供的几个示例程序,直接用其中的ExecCommand 子程序就可以了,不必理解下面的接口步骤说明。 该操作步骤适用于V3.1 及以上版本的模块,与之前版本的模块的操作步骤不同。 并口方式的操作步骤是(请参考示例程序中的ExecCommand 子程序): ① 基本概念:并口数据交换通过模块的CH421A 芯片进行,外部单片机与模块交换数据实际上就是单片机存取CH421A 芯片的内部缓冲区。当模块挂在外部单片机的系统总线上时,模块需要占用外部单片机系统的两个I/O 地址,模块的I/O地址就是CH421A 芯片的I/O地址, 低地址为索引端口,高地址为数据端口。CH421A 芯片提供66 字节的双口SRAM 缓冲区(地 址为00H-41H)以及两个字节的单向缓冲区(地址为42H 和43H)。模块的通讯协议约定, 从地址PARA_BUFFER_ADDR 即00H 开始的64 个字节是数据块缓冲区,地址范围是00H-3FH; 地址PARA_COMMAND_ADDR 即40H 是操作命令码的单元地址,该单元由单片机在操作前设置, 由模块在操作完成后清除;地址PARA_STATUS_ADDR即41H 是操作结果状态码的单元地址, 该单元由模块在操作完成后设置;地址PARA_CMD_LEN_ADDR 即42H 是命令包长度的单元地 址,该单元低7位为后续参数的长度,最高位用于通知模块,为1 则激活/继续,为0 则结 束/应答,该单元由单片机在操作前设置;地址PARA_STS_LEN_ADDR 即43H是状态包长度的 单元地址,该单元低7 位为后续参数的长度,由模块在操作完成后设置以返回给单片机。 ② 单片机系统将命令码写到CH421A 的索引地址PARA_COMMAND_ADDR中,将命令的后续参数写到CH421A 的索引地址PARA_BUFFER_ADDR 开始的缓冲区中,并将这些后续参数的长度写到CH421A 的索引地址PARA_CMD_LEN_ADDR 中并设置该单元最高位为1 以激活操作,有些命令不需要任何参数,那么参数的长度就应该是0(由于最高位为1,实际数据是80H)。 ③ 默认情况下,PARA_CMD_LEN_ADDR 的最高位为0,当单片机系统设PARA_CMD_LEN_ADDR的最高位为1 后,该0-1 转变将通知模块启动操作。 ④ 模块检测到PARA_CMD_LEN_ADDR 的0-1转变后,从CH421A读取命令码及可选的参数,然后分析命令码并执行。 ⑤ 对于以字节为单位的文件数据块读写操作请跳过此步骤,对于以扇区为单位的文件数据块读写操作还应该有以下步骤,每读写一个扇区的数据,以下过程就会重复8 次,每次传输64 字节的数据,共8 次可以传输一个扇区的数据。每次传输过程必须在2mS 时间之内完成,否则有些U 盘可能会工作不正常。 如果是CMD_FileRead 或CMD_FileReadLast 命令,模块将请求读取数据的状态码USB_INT_DISK_READ 写到CH421A 的索引地址PARA_STATUS_ADDR,然后模块的INT#引脚输出低电平。单片机系统检测到INT#的低电平后,应该从CH421A的PARA_STATUS_ADDR读取状态码,接着设置PARA_CMD_LEN_ADDR的最高位为0(作为中断应答),然后从CH421A的索引地址PARA_BUFFER_ADDR开始,连续取走64 字节的数据块,取走64字节数据后,单片机系统应该设置PARA_CMD_LEN_ADDR 的最高位为1,通知模块已经取走数据,可以继续。 如果是CMD_FileWrite 命令,模块将请求写入数据的状态码USB_INT_DISK_WRITE 写到CH421A 的索引地址PARA_STATUS_ADDR,然后模块的INT#引脚输出低电平。单片机系统检测到INT#的低电平后,应该从CH421A 的索引地址PARA_STATUS_ADDR读取状态码,接着设置PARA_CMD_LEN_ADDR 的最高位为0(作为中断应答),然后从CH421A 的索引地址PARA_BUFFER_ADDR 开始,连续写入64 字节的数据块,写完数据后,单片机系统应该设置PARA_CMD_LEN_ADDR 的最高位为1,通知模块已经写入数据,可以继续。 如果模块在数据读写过程中检测到错误,那么模块将读写数据块失败重试状态码USB_INT_DISK_RETRY写到CH421A的索引地址PARA_STATUS_ADDR,然后模块的INT#引脚输出低电平。单片机系统检测到INT#的低电平后,应该从CH421A 的索引地址PARA_STATUS_ADDR 读取状态码,接着设置PARA_CMD_LEN_ADDR的最高位为0(作为中断应答),然后从CH421A 的索引地址PARA_BUFFER_ADDR 开始连续读取两个字节的数据,之后,单片机系统应该设置PARA_CMD_LEN_ADDR 的最高位为1,通知模块可以继续。读取的两个字节是一个16 位的数据,指定需要回改指针的字节数,大端时高字节在前,小端时低字节在前。用户端程序接收到USB_INT_DISK_RETRY 状态码后,应该根据该16位数据回改文件数据缓冲区指针,以便重新发送或接收数据。 ⑥ 模块执行完成,将操作状态码写到CH421A的索引地址PARA_STATUS_ADDR。如果状态码为操作成功ERR_SUCCESS,那么模块还将后续的结果数据的总长度写到CH421A 的索引地址PARA_STS_LEN_ADDR中,并从CH421A 的索引地址PARA_BUFFER_ADDR 开始写入结果数据。有些命令执行后没有结果数据返回,那么结果数据的长度就会是0。 ⑦ 模块将PARA_COMMAND_ADDR 清零,并使INT#引脚输出低电平,通知单片机系统该命令操作完成。 ⑧ 单片机系统收到INT#的低电平中断(或者下降沿中断,或者定期查询发现INT#为低电平)后,从CH421A 读取返回的状态码及可选的结果数据,然后设置PARA_CMD_LEN_ADDR的最高位为0(作为中断应答)。当模块收到下一个启动操作信号(指PARA_CMD_LEN_ADDR 最高位的0-1 转变)或者PARA_CMD_LEN_ADDR 的最高位恢复为0 时,就会将模块的INT#引脚恢复为高电平,撤消对单片机的中断请求。至此,一个操作完成。 5.4.4 时序接口 测试条件:TA=25℃,VCC=5V (RD 是指RD#信号有效并且CS#信号有效,RD#=CS#=0 执行读操作) (WR 是指WR#信号有效并且CS#信号有效,WR#=CS#=0 执行写操作) 5.5 U盘读写的串口说明 5.5.1 接口定义 模块具有两个外部接口:P1 是USB 插座,可以直接插入U 盘或者通过USB 延长线连接U 盘,当进行程序升级或者重新配置时应该通过USB 对连线连接计算机的USB 端口;P2 是16 脚的双排针或者插座,用于连接单片机系统。 在串口方式下,单片机与模块的P2 端口相连接,只需要使用高8 脚(第9 脚到第16脚),其余引脚可以不连接。模块可以通过串行输入SIN、串行输出SOUT 连接到单片机的异步串口,除此之外,启动输入STA#还应该连接到单片机的一个I/O 引脚,而中断输出INT#可以根据需要决定是否连接到单片机的中断引脚。 模块的串口是1 位起始位、8 位数据位、1位停止位的异步串口,串口的通讯波特率可以在功能配置时设定,如果未设定那么默认是4800bps(与晶体X2 的频率有关),单片机系统可以根据需要通过CMD_BaudRate 命令设定更高的波特率。如果在功能配置时选择检查串口超时,那么在通过串口输入命令包时,模块会检查串口数据输入超时,如果连续两个数据字节之间的间隔大于串口输入超时时间,则模块将放弃该命令包。 4+1 线串口是指GND、SIN、SOUT、STA#和可选的INT#,P2 引脚定义如下: 为了节约单片机的I/O 引脚,模块还支持三线制串口,在这种方式下,单片机与模块之间只需要连接SIN 和SOUT 两根信号线及公共地线,单片机通过串口发送两个同步码字节(57H、ABH)代替原来向模块的STA#引脚提供的启动信号,实现与模块的命令同步。在通过串口输入两个同步码字节时,模块会检查串口数据输入超时,如果连续两个数据字节之间的间隔大于串口输入超时时间,则模块将放弃该同步码及命令包。 3 线串口是指GND、SIN、SOUT,P2 引脚定义如下: 5.5.2 参考电路 以下参考电路都是以MCS51 单片机为例,其它类型的单片机可以参考修改。 ① 串口连接,串口等待状态 图中的P3 端口就是连接模块的端口。由于是串口连接,所以连接信号线较少,只需要三个信号线:SIN,SOUT 和STA#,模块的中断信号线INT#是可选的,如果采用中断通知方式,那么可以连接INT0 或者INT1,否则不必连接模块的INT#信号线。建议参考该图,将模块端口的14 脚(原并口的CS#引脚)接VCC,避免并口被选中。 图14 ② 三线制串口连接,串口等待状态 图中的P4 端口就是连接模块的端口。由于是三线制串口连接,所以连接信号线最少,只需要两个信号线:SIN 和SOUT,模块的中断信号线INT#必须接低电平或者接地。建议参考该图,将模块端口的14 脚(原并口的CS#引脚)接VCC,避免并口被选中。 图15 5.5.3 接口操作 基本操作步骤是,单片机系统将命令码、后续参数长度(因为各命令码所需要的参数不等长)和参数写给模块,并通知其启动操作,模块执行完成后以中断方式通知单片机,并返回操作状态和操作结果。 因为接口操作看起来比较复杂,所以实际过程可以参考随模块一起提供的几个示例程序,直接用其中的ExecCommand 子程序就可以了,不必理解下面的接口步骤说明。 串口方式的操作步骤是(请参考示例程序中的ExecCommand 子程序): ① 基本概念:串口通过双向异步串口交换数据,为了防止将命令当成数据,或者将数据当成命令,在单片机系统与模块之间应该采取同步措施。STA#的下降沿用于通知模块“命令码开始发送”,INT#的下降沿用于通知单片机系统“状态码开始发送”。如果单片机的I/O 引脚资源有限,也可以不连接模块的INT#引脚。如果是三线制串口,那么单片机通过串口发送两个同步码字节代替向STA#提供启动信号,而不必连接模块的STA#引脚,从而可以节约单片机的I/O 引脚。 ② 单片机系统向模块的STA#引脚产生低电平脉冲,通知模块启动操作,“命令码开始发送”,要求低电平脉冲的宽度不小于1uS。如果是三线制串口,那么单片机通过串口发送两个同步码字节代替向STA#提供启动信号。 ③ 单片机按以下顺序从串口输出:命令码、后续的参数的长度、以及可选的参数。有些命令不需要任何参数,那么参数的长度就应该是0。 ④ 模块检测到STA#引脚的下降沿后,从串口依次接收命令码及可选的参数,然后分析命令码并执行。如果是三线制串口,那么模块以在20mS 之内收到同个同步码字节作为STA#下降沿的代替信号。 ⑤ 对于以字节为单位的文件数据块读写操作请跳过此步骤,对于以扇区为单位的文件数据块读写操作还应该有以下步骤,每读写一个扇区的数据,以下过程就会重复8 次,每次传输64 字节的数据,共8 次可以传输一个扇区的数据。如果是CMD_FileRead 命令,模块将INT#引脚输出低电平,然后通过串口输出请求读取数据的状态码USB_INT_DISK_READ,状态码输出完成后,模块将INT#引脚恢复为高电平,然后从串口依次输出64 字节的数据。单片机系统应该在收到状态码后,再从串口连续接收64 字节的数据块。如果是CMD_FileWrite 命令,模块将INT#引脚输出低电平,然后通过串口输出请求写入数据的状态码USB_INT_DISK_WRITE,状态码输出完成后,模块将INT#引脚恢复为高电平,然后等待从串口输入数据。单片机系统应该在收到状态码后,从串口连续输出64 字节的数据块。如果模块在数据读写过程中检测到错误,那么模块将INT#引脚输出低电平,然后通过串口输出读写数据块失败重试状态码USB_INT_DISK_RETRY,状态码输出完成后,模块将INT#引脚恢复为高电平,然后从串口依次输出两字节的数据。单片机系统应该在收到状态码后,再从串口连续接收两字节的数据。这两字节是一个16 位的数据,指定需要回改指针的字节数,大端时高字节在前,小端时低字节在前。用户端程序接收到USB_INT_DISK_RETRY 状态码后,应该根据该16 位数据回改文件数据缓冲区指针,以便重新发送或接收数据。 ⑥ 模块执行完成,将INT#引脚输出低电平,通知单片机系统命令操作完成,“状态码开始发送”,然后通过串口输出操作状态码,状态码输出完成后,模块将INT#引脚恢复为高电平。如果状态码为操作成功ERR_SUCCESS,那么模块还从串口依次输出后续的结果数据的长度、以及可选的结果数据。有些命令执行后没有结果数据返回,那么结果数据的长度就会是0。 ⑦ 单片机系统收到INT#的下降沿中断(或者定期查询发现INT#为低电平,或者未连接模块的INT#引脚,而是从串口收到状态码)后,从串口获得返回的状态码及可选的结果数据。如果是三线制串口,那么由于未连接模块的INT#引脚,所以单片机只能以串口收到操作状态码及结果作为操作结束。 ⑧ 单片机系统根据需要可以转到步骤②发出下一个操作命令。 5.5.4 接口时序 测试条件:TA=25℃,VCC=5V 6 软件设计 为了使上位PC机能够直接读取该读写器写入U盘的数据,数据存储按照FAT32文件管理方式存储,其中涉及USB和UFI协议以及FAT32文件存储格式。 6.1 USB协议 USB(通用串行总线)用于将USB接口的外围设备(device)连接到主机(host),实现二者之间数据传输的外部总线结构,是一种快速、灵活的总线接口,USB的传输类型有控制(control)、批量(bulk)、中断(interrupt)和同步(synchronous)传输4种,它最大的特点是易于使用,即插即用,主要是用在中速和低速的外设。     控制数据用于在USB接入总线时对其进行配置,其他的驱动软件可以根据具体的应用来选择使用控制传输,这种数据传输不会丢失数据。     典型的批量数据包括象使用打印机或扫描仪时所出现的大数据量的数据,这种批量数据是连续的,通过在硬件中实现差错检测功能,并且有选择地进行一定的应进重试操作,可以在硬件层次上保证数据的可靠交换。     由设备自发产生的数据传输是中断数据传输,这类数据传输可以由USB设备在任意时刻发起,而且USB总线以不低于设备说明的速率进行传输。     同步数据在产生、传送和处理过程中是连续的和实时的,在稳定的同步数据发送和接收速率中包含了相应的时钟信息,为了保持定时关系,同步数据必须按照接收的速率进行传输。 6.2 BULK_ONLY和UFI协议 USB设备分为5大类,即显示器、通信设备、音频设备、人机输入和海量存储。通常所用的U盘、移动硬盘均属于海量存储类。海量存储类的规范中包括4个独立的子规范,即CBI传输、Bulk-Only传输、ATA命令块、UFI命令规范。前两个协议定义了数据/命令/状态在USB总线上的传输方法,Bulk-Only传输协议仅仅使用Bulk端点传送数据/命令/状态,CBI传输协议则使用Control/bulk/interrupt三种类型的端点进行数据/命令/状态的传送。后两个协议定义了存储介质的操作命令,ATA协议用于硬盘,UFI协议则针对USB移动存储,U盘读写器的设计遵循Bulk-Only传输协议和UFI命令规范。UFI命令块规范是针对USB移动存储而制定的,它总共定义了19个12字节长度的操作命令。     Bulk-Only事务以主机向设备发送CBW(Command Block Warp)包,并以建立相应的数据传输开始的,设备接收到CBW包,检查并解释它,试图满足主机的要求,并通过CSW(Command State Wrap)包向主机返回状态信息。     CBW是主机通过Bulk-Out端点向设备发送的命令块包,在CBW中使用方向位和数据传输长度域指明期待的传输,CBW必须起始于包边界,并且必须以31字节的短包传输结束,相继的数据包和CSW包必须开始于一个新的包边界,所有的CBW包必须按低字节在前的次序传输。     CBW包结构如图16所示,各域含义如下: 图16 CBW包结构如图 1)命令块包标识。CBW包标记,表明这是一个CBW包,这个域的值为43425355H。 2)命令块标记。当设备返回相应的CSW包时,必须使命令状态标记域的值与此值相同。 3)数据传输长度。指明命令执行期间在Bulk端点上传数据的字节长度,如果这个域的值是0,则在CBW和CSW之间设备和主机不传输任何数据,并且设备将忽略在命令块标旗域中的方向位的值。 4)命令块标旗。方向位规定了Bulk端点数据传输的方向,其他位预留。 5)逻辑单元号。指定命令块被发送到的逻辑单元号,如果设备不支持多个逻辑单元号,则主机将这个域设置为0。 6)CBWCB长度,定义了CBWCB的有效长度,合法值为1-16。 7)CBWCB。由设备执行的命令,由设备解释。     CSW向主机表明来自于CBW包的命令块的执行状态。设备收到CBW包解析处理后将通过Bulk-In端点发送一个CSW包。     CSW开始于包边界,并以13字节的短包结束,结构如图17所示,各域含义如下:  图 17 命令状态包结构 1)命令状态包标识。CSW包的标记,表明这是一个CSW包,这个域的值为53425355H。 2)命令状态标记。次域的值域CBW包的命令块标记相同。 3)数据残余。实际数据传输量与CBW包中规定的数据传输长度的差值。 4)命令执行状态,表明命令成功或失败信息,如果命令执行成功,则设备将设置此域的值为0,非0值;则表明失败或错误。     UFI是针对USB移动存储而制定的命令块协议,它规定了主机和设备进行信息交换所使用的命令块、数据和状态信息,Bulk-Only传输协议定义了传输这些信息的方法,其中UFI命令块是封装在CBW包中的CBWCB,设备通过读取CBWCB确定具体要执行何种操作命令(如读命令),如何完成这个命令(如从闪存的哪个地址读,需要读取的长度),设备将命令的执行状态封装成CSW返回给主机。     UFI用于大多数命令的12字节命令块的描述,结构如图4所示,其中各参数意义如下: 1)操作命令代码。指明所需要执行的操作命令; 2)逻辑单元号。指明命令将发送到哪个逻辑单元,如果设备只有一个逻辑单元,则此域的值为0。 3)逻辑块地址。命令操作的起始地址。 4)传输长度,指明请求传输的数据量,通常以"扇区"作单位,但是有几个命令是以"字节"作单位的,对于这些命令,传输长度域可以以不同的名字标识,若此域的值为0,则表面没有数据需要传输。 5)参数列表长度,用于指定发送到设备的字节数,这个域典型的应用于发送到设备的参数命令块(如模式参数、诊断参数等),若此域的值为0,则表面没有数据需要传输。 6)分配长度,指明主机已经分配的用于返回数据的最大字节长度,若此值为0,则表明没有数据需要传输。 6.3 FAT32     FAT是Microsoft较早推出的
/
本文档为【单片机读写U盘】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索