当前位置:高校自动化网 >> fpga >> 浏览文章

NIOSII的USB主机模式

文章来源:ednchina 作者:avic


该文章讲述了NIOSII的USB主机模式.

 

 

文转载自黑金动力社区:http://www.heijin.org

      上一节,我们讲了USB的设备模式,可以实现计算机与黑金开发板的数据通信。这一节,我们以上一节为基础,研究一下如何利用CH376芯片来实现U盘的读写。

大家都知道,不管是U盘,SD卡,还是我们经常用到的电脑硬盘,都存在文件的建立,存取,修改等操作。从系统角度来说,负责管理这些工作的我们称之为文件管理系统,简称文件系统。经常用电脑的人对这个概念一定很熟悉,比如我们在装系统的时候,不可避免的会遇到选择何种文件系统(除非你用GHOST,呵呵),FAT32还是NTFS等等,这个就是文件系统。文件系统是对文件存储器空间进行组织和分配,负责文件的存储并对存入的文件进行保护和检索的系统,具体地说,他负责为用户建立文件、存入、读出、修改、转储文件爱你,控制文件的存取,当用户不再使用时撤销文件等。

      在U盘中,同样存在文件系统。大家熟知的,当我们想格式化U盘的时候,我们也需要选择文件系统类型,如下图所示

点击浏览下一页

      因此,如果要想通过U盘来实现开发板与电脑之间的数据交换,那么,在开发板上也也应该在FAT规范下通过文件的形式存取U盘中的数据。不过,CH376已经把这个工作为我们做好了。

CH376在芯片内部集成了FAT文件系统,支持 FAT32、FAT16和FAT12,符合WINDOWS的文件系统格式。这种无微不至的“关怀”实在令我们感动啊,因为这样我们就不需要在自己动手编写了文件系统了,为我们减少了很多的工作量,剩下的时间看看世界杯还是很不错哦,呵呵。

      CH376对U盘文件的读写方式分为两种:扇区模式和字节模式。

      扇区模式下,以扇区(每扇区通常是512字节)为基本单位对U盘文件进行读写,所以读写速度略快,但是通常情况下需要额外的文件数据缓冲区,额外的文件数据缓冲区必须是扇区长度512 的整数倍,所以适用于RAM多、数据量大、频繁读写数据的单片机系统。扇区读写的子程序主要有扇区读CH376SecRead 和扇区写CH376SecWrite。

      字节模式下,以字节为基本单位对U盘文件进行读写,少则 1 字节,多则 65535字节,读写速度略慢,但是不需要额外的文件数据缓冲区,使用方便,适用于 RAM 少(从几字节到几十 K 都可以)、数据量小或者数据零碎、不经常读写数据的单片机系统。但是,因为闪存只能进行有限次擦写,如果频繁地向U盘写入零碎的数据,可能会缩短U 盘中闪存的使用寿命。

      下面,我们就通过我们黑金开发板来实践一下,看如何使用CH376来实现U盘的读取的。

在南京沁恒的官方网站上,为我们提供了CH376相关的例程,不过都是基于单片机的,我们需要移植到NIOS II下实现。

      首先,我们需要自己来写USB的底层驱动,这个跟上一节的USB驱动稍有不同。我们在driver下建立hal.c文件,如下所示

/*
 * =====================================================================================
 *
 *       Filename:  usb.c
 *
 *    Description:  ch376底层驱动
 *
 *        Version:  1.0.0
 *        Created:  2010.4.16
 *       Revision:  none
 *       Compiler:  Nios II 9.0 IDE
 *
 *         Author:  马瑞 (AVIC)
 *          Email:  avic633@gmail.com  
 *
 * =====================================================================================
 */
//-----------------Include files-------------------------//
#include "../inc/hal.h"
#include "altera_avalon_pio_regs.h"
#include "sys/alt_irq.h"
#include <unistd.h>
#include <stdio.h>
#include "../inc/ch376inc.h"
#include "system.h"
//-----------------Function Prototype--------------------//
void xWriteCH376Cmd(unsign
相关文章:
  • NIOS II自定义指令设计之实例篇
  • 谈谈赛灵思的局部重配置技术Partial Reconfiguration
  • FPGAAltera所提供的在線技術培訓全中文
  • 上一篇:NIOSII中LCD驱动及图片显示
    下一篇:VHDL综合设计经验
    最近更新