USB通信程序设计 第10页

USB通信程序设计 第10页
   图4.13 SET CONFIGURATION的工作流程图
4.1.4 NAND FLASH操作程序——NFLASH32.C
 存储器操作程序处理了数据的固定存储读写操作。对FLASH的读写又有其自身的特点,特别是它可以随机读,但无法随机的写。因此,对于写数据的问题,就需要通过设置缓冲区来解决。下面介绍各功能函数的设计实现。
4.1.4.1 块擦除函数
 对于FLASH的擦除操作是基于16K字节的块的。下图为块擦除函数程序流程图:
                           图4.13 块擦除函数程序流程图
4.1.4.2 页拷贝函数
 对于FLASH的页拷贝操作是基于512字节的扇区的。下图为页拷贝函数程序流程图:
                           图4.14 页拷贝函数程序流程图
4.1.4.3 写预处理函数
 对预处理的功能主要是对需要写入的块进行擦除,以及对这些块内不修改的页进行保存。
4.1.4.4 写FLASH函数
 擦除后就可以对存储器进行写操作了。这里对存储器的操时作是以页为单位进行的。下图为写FLASH操作的流程图:
 
图4.15 写FLASH函数程序流程图
4.1.4.5 读预处理函数
 对FLASH的读操作可以是随机读取,所以这里只要给定读数据的首地址和读写长度。
4.1.4.6 读FLASH函数
 针对于FLASH的数据存储结构,读操作分别要对每一页的第一部分和第二部分进行。下图为读FLASH操作的流程图:
 图4.16 读FLASH函数程序流程图
4.2 固件调试
 对设备的程序进行调试是本项目开发过程中最难的部分。由于USB协议有严格的时间要求,这就使得程序必须在有效时间内对某些请求或状态进行处理,否则,USB将无法正常工作。这里结合项目的开发过程,将调试划分为以下四个步骤。在调试的过程中需要用到一些辅助工具,如示波器、串口调试软件和USB总线数据检测软件等。
4.2.1 检查USB器件是否正常工作
 确定USB芯片是否已经正常工作,是所有调试的基础,得到电路板之后,这是一个首先要解决的问题。判断USB芯片是否已经工作,可以从两个方面来判断,一是将CLKOUT设为12M(缺省为4M),然后用示波器量CLKOUT引脚,若确为12M而不是4M,则说明USB的地址和数据都可以正确传送,各种信号线接法正确,USB芯片可以正常工作,硬件基本没有问题。另一方面,如果使用SOFTCONNECT,则在主程序中进行软连接后,如果GL_N灯闪烁几下,PC机上出现了未知设备,则说明USB进行软连接正常,也说明芯片已经工作了。
4.2.2 设备枚举
 在确定USB设备正常工作的前提下,插上设备将进入枚举阶段。USB设备的调试过程其实就是根据主机的请求,不断地向主机提供各种信息的过程。因此,了解主机按照什么样的顺序向设备发出请求,USB设备的枚举顺序是非常有必要的。
以下是USB设备枚举数据传输的全过程:
1. 主机检测到有设备插上,总线复位;
2. 主机读取设备描述符;
3. 地址分配;
4. 主机从新的地址获取设备描述符;
5. 主机读取配置描述符;
6. 读取描述符集合;
7. 设置配置;
8. 读取配置状态;
9. 读取接口状态。
本项目USB设备按海量存储协议提供描述符。在调试的过程中发现D12控制端点的缓冲区可以达到64个字节(芯片数据手册的说明是控制端点的缓冲区只有16个字节),这样的话,设备与主机在枚举数据传输过程中就可以以最大64字节的数据包传输数据,减少了数据传输的次数。

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ... 下一页  >> 

Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有