历史上的今天
返回首页

历史上的今天

今天是:2025年03月21日(星期五)

正在发生

2018年03月21日 | 基于微处理器S3C6410的NAND FLASH模拟U盘的原理与实现

2018-03-21 来源:eefocus

    本文介绍了嵌入式Linux操作系统下基于三星微处理器S3C6410的NAND FLASH模拟U盘的原理与实现方法。操作系统采用Linux 2.6.28版本,平台为飞凌OK6410-A开发板。采用的方案是通过添加一个512 MB的NAND FLASH分区空间,配置Linux系统USB Gadget功能,实现划分出的512 MB的NAND FLASH空间以U盘存储系统与PC机通信。该方案的文献目前在国内外同等操作系统版本和平台上并无先例。通过上述方案成功地实现了S3C6410开发板划分出512 MB的NAND FLASH空间以U盘形式挂载到了PC机上,实现与PC机的信息交换。

    现阶段嵌入式产品作为U盘挂载到PC机上在各类电子产品中被越来越多的应用,Linux操作系统在电子产品中的应用也越来越广泛,但是Linux中模拟U盘挂载到PC机中,与PC机上通用Windows的通信还很好的达到实现。本文基于ARM11体系结构的处理器,实现了Linux系统下NAND FLASH模拟U盘挂载到PC机上与Windows进行通信。并在飞凌的OK6410-A板上得到验证,实现了该功能。
    目前国内嵌入式产品多用ARM9体系结构,ARM11则用于高端电子产品,NAND FLASH模拟U盘的挂载技术虽然在电子产品中广泛应用,但是对于以新起的Linux操作系统的高端电子产品,这项技术还鲜少以文献的形式得以系统阐述,国内长春大学张伟等人在这方面做过研究,但是他们是基于ARM9体系,本文基于ARM9在ARM11体系结构的处理器上做了新的研究和应用。
    现阶段有3类方式可以实现模拟U盘的功能,虚拟vfat.ing模拟U盘挂载,SD卡模拟U盘挂载,NAND FLASH模拟U盘挂载。NAND FLASH由于其大容量和高性价比,往往更加流行。本文是通过NAND FLASH实现模拟U盘的挂载的。

1 NAND FLASH模拟U盘原理分析
    嵌入式产品模拟U盘与PC通信是现代嵌入式产品所广泛应用的一种技术,因此在实现Linux下NAND FLASH模拟U盘之前先要对Linux下NAND
FLASH模拟U盘的原理进行分析。Linux下对模拟U盘存储设备的支持就是Linux-USB Gadget驱动的加载,该驱动框架实现了USB协议定义的设备端的软件功能。
1.1 Linux-Gadget框架
    Linux系统中Gadget驱动层序框架分为3层:Gadget驱动层;Gadget API层;UDC层。Gadget驱动层实现实现不同的USB功能,例如“USB网卡”、“U盘”、“打印机”等。Gadget API层,为Gadget提供的一套标准API,由底层USB设备控制器(USB DevICe Controller,UDC)实现这套API,Gadget驱动通过调用这些API实现与UDC通信。UDC是片上系统(SoC)的一部分,不同的UDC需要不同的驱动,同样的UDC不同板子代码也不一样,这一层为平台相关层,直接访问访问硬件,并向上层提供与硬件相关操作的回调函数。Gadget驱动框架原理图如图1所示。

a.JPG

    
    UDC层中usb_gadget和usb_ep为2个描述结构体,分别描述UDC和端点,Gadget API通过这两个结构实现对UDC的控制。usb_gadget_ops和usb_ep_ops为函数集结构体,其主要功能是实现与硬件的交互并实现返回给上层Gadget API所需信息的功能。usb_gadget_register_driver和usb_gadget_unregister_driver为Gadget框架提供的标准API,是驱动层序的注册函数,由UDC层提供,之所以不是通过Gadget API层实现的原因是,用于将Gadget驱动程序绑定到UDC。xxx_udc_IRQ是UDC设备的中断处理函数,处理设备及其端点的中断请求。
    Gadget API层为Gadget定义的一组标准API接口函数,并向上提供编程接口,这一层的存在实现了将下层UDC驱动和上层Gadget驱动程序的隔离,使得Linux系统中编写USB设备侧驱动程序时能够把功能的实现和底层通信分离。
    Gadget驱动程序使用usb_gadget_driver结构体描述,实现将Gadget驱动与下层设备控制器相关联,并开启设备功能。


1.2 Linux NAND FLASH分区原理
    NAND FLASH作为存储设备,存储着嵌入式产品从开机到结束的所有代码,所以做好存储设备的分区是至关重要的问题,LINUX操作系统下,分区如图2所示。

b.JPG

 

    
    Linux2.6内核中,在文件archarmplat-s3cincludeplatPartition.h中定义了分区信息如下:
   e.JPG
    其中“.name”为分区的名称,“.offset”为分区起始地址,“.size”为分区大小。这个结构体包涵了NANDFLASH的所有分区信息。

2 NAND FLASH模拟U盘实践方法
2.1 修改内核
    由于struct mtd_partition s3c_partition_info[]定义了分区信息,所以首先要修改或者添加分区信息,使得模拟得到的U盘空间大小符合实际需求。
    在arch\arm\plat-s3c\incIude\plat\Partition.h的struct mtd_partition s3c_partition_info[]中添加分区信息如下:
   f.JPG
    
    其中:.name为分区名称,定义为U_Strorage,.offset为起始地址,这个值需要结合该模块前面的模块的大小和起始地址算出;.size为定义的分区大小,为512 MB。
    添加分区后重新编译,可在文件系统的/etc下找到相应盘符,如:mtdbLOCk4。
2.2 配置内核
    内核中实现NAND FLASH模拟U盘挂载的驱动是USB中的Gadget实现的,所以在实现这项功能时,首先在编译内核的时候,配置上Gadget功能。具体操作如下:
    在内核源代码的根目录下执行#make menuconfig,这时将会看到内核的菜单选项,选择:
    devICe driver-->
    [*]usb support-->
    <*>usb gadget support
    <*>usb preipheral controller
    将usb support功能选中,选择编译该功能进内核,并在usb support功能子目录中选择中usb gadget support和usb preipheral contro ller功能,选择编译进内核,做完这些操作后编译内核。
    在shell窗口命令行中输入:
    #make zImage
    #make modules
    在driver/usb/gadget目录下会生成g_file_storage.ko和s3c_udc_otg.ko.讲这两个模块复制到目标板的文件系统中。
    注意:当usb gadget support功能非作为模块编译进内核时,编译过模块后需要更新内核。而当usb gadget support功能作为模块编译进内核时,(选择栏应填“usb gadget support”,其中“M”代表模块),在编译生成模块后,除了要加载g_file_storage.ko还要加载s3c_udc_otg.ko。


2.3 加载模块
    在目标板的shell命令窗口中执行:
    #insmod s3c_udc_otg.ko
    #insmod g_file_storage.ko file=/dev/mtdbLOCk4 stall=0 removable=1
    这个时候将目标板连接到PC机即可看到被模拟的U盘盘符,接着就可以像操作正常U盘一样对该U盘进行操作。
    注意:这个时候模拟U盘已经存在,但是在目标板中还看不到该U盘盘符,需要执行:
    #mkdir/mnt/U_Storage
    #mount-t vfat/dev/mtdblock4/U_Storage然后,才能在目标板的/mnt/U_Storage下操作这个U盘。

3 总结与展望
    到此已经阐述并实现了模拟U盘的实现原理,其实践结果如图3所示。

c.JPG

    
    从图中看出属性中U_Storage的容量为504 MB并不是512 MB,这是因为厂家生产存储介质时,容量是10进制,比如1 GB=1 000 MB,但是电脑却是采用二进制,1 GB=210MB,1 MB=210KB,这样计算,电脑显示容量大小要比标注的容量小些。在PC机上在U_Storage中新建一个名为“zy”的文件夹,然后再在开发板上新建一个名为“haha”的文件夹,同时在Windows下和板子中查看,会出现如图4所示信息。

d.JPG

    
    图4中H盘为PC机给U_Storage分配的盘符,上层界面为PC串口与开发板交互的打印信息该信息显示的是开发板的内容。从图中可知,H盘中存在“haha”和“zy”两个目录;开发板与PC交换界面中跳到/mnt/U_Storage/目录下,用“ls”命令查得,开发板交换目录中存在“haha”和“zy”两个目录,证明U盘和PC交互信息成功。NAND FLASH模拟U盘挂载,使得目标板充分利用了U盘的便捷功能,使得携带、操作、移植更为方便。Linux下基于ARM11体系结构模拟U盘的实现使得高端电子产品模拟U盘技术得到广泛应用。经实验验证该设计是成功的,成功解决了ARM11体系结构下目标板作为U盘挂载到PC机的问题,具有实际意义。

推荐阅读

史海拾趣

聚洵(Gainsil)公司的发展小趣事

泰科天润(GPT)公司电子行业发展的五个故事

故事一:初创与早期发展

2011年,正值国内碳化硅产业从2英寸晶圆向4英寸迭代的关键时期,泰科天润半导体科技(北京)有限公司应运而生,成为国内最早一批建设碳化硅晶圆制造工厂的民营企业。公司初创时面临着技术、资金、市场等多方面的挑战,但凭借对碳化硅产业的坚定信念和持续投入,逐步搭建起生产线,完成了设备采购和工艺调控,为后续的快速发展奠定了坚实基础。

故事二:产品线扩展与技术创新

随着技术的不断积累和市场的逐步拓展,泰科天润的产品线日益丰富。公司不仅成功推出了600V至1700V系列的碳化硅肖特基二极管产品,实现了批量生产,还不断向更高端的技术领域迈进。2023年,泰科天润推出了多款新品,包括1200V SiC MOSFET、2000V SiC二极管等,并在市场上取得了显著的销售业绩。这些新产品的推出,不仅丰富了公司的产品线,也进一步巩固了泰科天润在碳化硅功率器件领域的领先地位。

故事三:生产线建设与产能扩张

为了满足日益增长的市场需求,泰科天润不断加大生产线的建设和产能的扩张。2023年,公司启动了北京总部基地6/8英寸生产线的建设,目前正在开展土建及桩基工程相关工作,预计2025年年初可实现通线并正式投产。此外,泰科天润还在湖南等地建设了多条生产线,实现了产能的快速增长。这些生产线的建设和产能扩张,为公司的持续发展提供了有力保障。

故事四:市场布局与业务拓展

泰科天润在市场布局上采取了多元化的战略,不仅深耕国内市场,还积极拓展国际市场。公司积极参与各类行业展会和论坛,与国内外客户和合作伙伴建立了广泛的联系。同时,泰科天润还根据不同行业的需求,推出了多套行业解决方案,进一步拓宽了市场应用领域。这些努力使得泰科天润在碳化硅功率器件市场上占据了重要的位置。

故事五:超级充电站项目

泰科天润不仅在产品研发和生产上取得了显著成绩,还在市场应用上进行了大胆尝试。2023年7月,泰科天润携手浏发集团打造的全国产碳化硅超级充电站正式投入运营。这是湖南县级城市首座集“光伏发电、电池储能、液冷超充”于一体的全碳化硅新能源汽车充电站。该项目的成功实施,不仅展示了泰科天润在碳化硅充电技术上的创新实力,也为新能源汽车充电技术的发展提供了新的思路和解决方案。

Einfochips公司的发展小趣事

随着硬件设计和验证领域的发展,SystemVerilog逐渐成为行业内的主流语言。Einfochips公司敏锐地捕捉到了这一趋势,并决定为客户提供从其他传统语言和环境转变到SystemVerilog的验证迁移服务。这一服务的推出,不仅帮助客户提高了设计和验证效率,还进一步扩大了Einfochips在硬件设计和验证领域的市场份额。

BROTHER公司的发展小趣事

在电子产品领域取得一定成就后,BROTHER并没有停止前进的步伐。公司开始寻求多元化业务的拓展,以应对市场变化和风险。除了传统的缝纫机和电子产品外,BROTHER还开始涉足打印机、传真机、扫描仪等办公设备领域。通过不断创新和研发,BROTHER成功推出了一系列高品质、高性能的办公设备产品,满足了不同客户的需求。同时,公司还积极开拓新的市场领域,如智能家居、物联网等前沿领域,为未来发展奠定了坚实基础。

Astro Tool Corp公司的发展小趣事

Astro Tool Corp公司深知产品质量是企业生存和发展的关键。因此,公司始终将质量管理放在首位,建立了完善的质量管理体系和检测机制。通过严格把控原材料采购、生产过程和成品检测等各个环节,公司确保了产品的稳定性和可靠性。同时,公司还注重品牌建设,通过提升产品附加值和服务质量,不断增强客户对公司的信任度和忠诚度。

Bomar公司的发展小趣事

随着电子行业的快速发展,Bomar公司逐渐意识到,仅仅依靠石英晶振产品已经无法满足市场的多样化需求。于是,在1988年,公司开始积极建立OEM客户群,将业务范围拓展至电信、计算机、医疗、安全、商业和工业等多个领域。通过与这些客户的紧密合作,Bomar公司不仅成功推出了时钟振荡器、VCXOs和TCXOs等新产品,还根据客户需求重新设计了制造流程,提升了产品性能和生产效率。

CQR SECURITY公司的发展小趣事

随着电子行业的快速发展,网络安全问题日益突出。CQR SECURITY公司敏锐地捕捉到了这一市场机遇,迅速调整战略方向,专注于提供针对电子设备的安全保护服务。公司研发了一系列高效的安全产品,有效应对了各类网络攻击和数据泄露事件。在不断应对行业挑战的过程中,CQR逐渐积累了丰富的安全实践经验,并赢得了客户的信赖和认可。

问答坊 | AI 解惑

探索视频图像干扰的产生和有效解决办法

新春伊始,在汇集、总结几年来对干扰原因(因素)的初步认识基础上,我们不妨来个“反向思维”,以求探索干扰的有效解决办法。     你做过安防工程吗?这样直接提问,虽然有些唐突,但还都可以回答“做过”。但是,如果我问:“你做工程 ...…

查看全部问答>

100分请教大家一个问题。怎样用单片机控制电机

现在有个项目,就是通过单片机控制精密行星直流减速电机(型号:ple06-16/55zyn04a3), 达到如下目的:电机 正转反转100次/分钟 电压15V,电流3.2A,功率120W 不知道选用什么型号的单片机,还有具体的编程大概是如何的?可以用C语言编程吗? ...…

查看全部问答>

WIN 2000下如何设计双网卡热备份

大家好?WIN2000下,双网卡热备份,也就是一个网卡坏了,另一个冗余网卡热切换,实现方案是什么?代码是什么?谢谢…

查看全部问答>

单片机学习新人 STC12C4052AD P1.1口电平输出.求解疑惑 上图 上程序

 用STC12C4052 搭建好最小系统 12M晶振 .写个 P1.1口输出 间隔时间输出脉冲信号.程序如下:     ORG 0000H    LJMP MAIN   ORG 0030HMAIN:         MOV R1, ...…

查看全部问答>

求指教

各位高手求指教啊,最近我想做FPGA方面的东西,但发现要写这方面的论文找不到合适的理论背景支持,各位大师指点一下哪方面比较适合容易写小论文啊…

查看全部问答>

f28027 launchpad 下不进去程序 求助

我用的launchpad f28027,下不进去程序,对那个跳线帽和开关怎么 设置,望多多指导啊 …

查看全部问答>

出一个 TP-LINK 路由器,九成九新,300M速度

出一个 TP-LINK 的路由器,九成九新,300M速度,原价210,现在 150元包邮出,需要的联系我的QQ 429512065…

查看全部问答>

PCB电路设计的14个误区

  现象一:这PCB板子的PCB设计要求不高,就用细一点的线,自动布吧点评:自动布线必然要占用更大的PCB面积,同时产生比手动布线多好多倍的过孔,在批量很大的产品中,PCB厂家降价所考虑的因素除了商务因素外,就是线宽和过孔数量,它们分别影响到 ...…

查看全部问答>

【转载】如何通过ARM管理FPGA周边设备

本帖最后由 chenzhufly 于 2014-11-24 16:11 编辑 在Altera SoC FPGA系统中,有两种不同的外设连接方式,一种是ARM通过AXI总线连接的外设,(可以成为硬外设),另外有一种是通过FPGA连接的外设, 在SoC FPGA中,通过FPGA连接的外设是通过LW HP ...…

查看全部问答>

MSP430F5529A支持几个UART口啊??

求大神解答啊,MSP430F5529A支持几个UART口啊??最近要选个单片机做项目,需要至少两个UART串口,不知道这个单片机支持几个啊??…

查看全部问答>