历史上的今天
返回首页

历史上的今天

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

正在发生

2018年02月21日 | 嵌入式系统U盘实时启动技术

2018-02-21 来源:eefocus

  引 言

  随着USB技术的发展,优盘在PC机系统上已得到广泛的应用,基本上取代了软盘,PC机系统可以实现从优盘启动。由于优盘性能稳定,体积小巧,访问速度快,因此它也非常适合作为嵌入式实时系统的存储设备。这为嵌入式实时系统的启动提供了一种崭新的思路,即从优盘启动。这种方法对嵌入式实时系统板上的程序存储空间要求不高,只要在Flash中存储嵌入式实时系统的Bootrom程序即可,将系统的映像文件放在优盘上,实现实时操作系统从优盘加载。


      目前基于VxWorks设计的嵌入式实时系统应用非常广泛。嵌入式实时系统的启动方式多种多样,WindRiver公司提供的参考BSP(Board support PACkage)包中就提供了几种启动方法。另外在参考文献[2]中,作者也提出了几种基于VxWorks的嵌入式系统的启动方法。这些方法可根据具体的应用需求,适当选取。笔者在开发CableModem时也都曾实现过这些方法。这些方法存在的共同问题是:虽然能更新板载程序存储器中的映像文件,但由于程序存储器一旦设计后就无法再扩展其存储空间;而在实际应用中,由于嵌入式系统功能的增强,系统映像文件的体积会不断增大,会出现超过目标板的程序存储空间的问题,从而使得新的映像文件无法烧录到目标板中。

      嵌入式实时系统从优盘启动的显著优点主要表现在:更新系统映象文件方便(替换优盘中的影像文件即可,无需重新烧录);启动快速(USB接口传输速度快),可适用于多种实时操作系统(保存在优盘中的映像文件也可以是使用其他嵌入式实时操作系统,如PSOS、Nuclues等开发生成的);对系统的Flash存储容量要求小(Flash中主要存储Bootrom程序,而系统映像文件保存在优盘中)。

      本文给出了实现嵌入式实时系统优盘启动的嵌入式主机硬件结构、软件协议栈以及主要程序流程,探讨了实现嵌入式实时系统从优盘启动的可行性。

  1 嵌入式USB主控制器的硬件结构及驱动

  嵌入式系统是软硬件紧密结合的系统。要实现从优盘启动,硬件上必须在嵌入式微处理器外围添加USBHOST主控制器;在软件上必须设计主控制器驱动程序 (HCD)、USB驱动程序、USB Client驱动程序以及应用程序。

  1.1 嵌入式USB主机硬件结构

  嵌入式USB主机硬件结构比较简单,只是在嵌入式微处理器外部加上USB主控芯片即可。在本项目中,嵌入式微处理器采用的是Motorola公司的MPC860T,USB主控制芯片采用的是SL811HS芯片。SL81lHS芯片是Cypress公司生产的、可支持全速数据传输的USB控制芯片,芯片内含USB主,主/从控制器,支持全速(full speed)/低速(low speed)数据传输,并能自动识别全速或低速设备。SL811HS所提供的接口遵从USBl.1标准。关于SL811HS更详细的使用方法请见参考文献[3]。使用SL811HS作为嵌入式USB主机控制器的系统硬件结构如图1所示。
 

  

 

  1.2 嵌入式USB主机上的软件结构

  从参考文献[4]可知,嵌入式主机要实现对其USB外设操作,必须有图2所示的3个软件结构层次:USB主控制器驱动器(HCD)、USB主驱动器(USBD)、USB没备驱动器。

  

在协议栈的最底部是USB主控制器USB HC(USBHost Controller),这是主系统中控制每一个USB设备的硬件部分。口前主要有两大类USB主控制器:一种是通用主控制器接口UHCI(Universal Host Controller Inter-face),另一种是开放主控制器接口OHCI(Open HostController Interface)。硬件厂商一般根据这两个规范设计USB主控制器。对于每一类型的主控制器都有一个与硬件独立的USB主控制器驱动器HCD(Host ControllerDriver)。WindRiver公司提供了两类驱动:usbHedUhciLib(UHCl主控制器库)和usbHcdOhciLib(OHCI主控制器库)。

  USB主驱动器USBD(USB host Driver)和HCD之间的接口允许一个或超过一个的底层主控制器,而且WindRiver公司的USBD能够同时连接多个USB HCD。这样的设计特点可以使开发者建立复杂的USB系统。USBD是在HCD之上的与硬件独立的模块。USBD管理每一个与主机相连的USBD设备,向更高层次提供了可与USBD设备通信的路径。它还负责自动处理USBD电力管理以及USBD带宽管理;而且,USBD还管理USBHub。Hub能否正确工作,是对USBD进行评价的标准之一,因此WindRiver公司的USBD设计者要使USBD透明地实现Huh的功能。这意味着USBD还能处理USBHub和设备的动态插拔。

  USB客户模块在USBD主驱动协议栈的顶端。USB类驱动(USB Class Driver)是Client模块的典型例子。USBD类驱动负责管理连接到USBD上的不同类型的设备,它们依靠USBD提供与每个设备的通信路径。USBClient模块的其他例子就是那些利用USBD与USB设备通信的应用程序。

  2 嵌入式实时系统优盘启动软件程序设计

  为实现对优盘的操作,在基于VxWorks设计的嵌入式实时系统中,需要设计的程序包括:USB主控制器驱动器、USBD主驱动器、USB块存储设备驱动程序、文件系统的安装以及应用程序通过文件系统读写优盘设备程序等,如图3所示。故要实现从优盘启动,需要在bootConfig..c文件中的usrRoot函数巾添加4个函数。

  

 

  (1)初始化USB主控制器的函数

  初始化HCD(USB Host Controler Driver)函数,即初始化SL81lHS并将其连接到指定总线上:LOCAL int fn-cAttach(pHRB_ATTACH pHrb)。

  该函数词用SL811Init()初始化SL811控制芯片。执行函数taskSpawn("tSl81lint",0,0,0x4000,(FUNCPTR)intThread,(int)pHost,0,0,0,0,0,0。0,0,O),创建intThread任务对发生的中断作出处理。

  这里的intTbaead调用OSS_SEM_TAKE(pHost->in-tPendi

  ng,interval)阻塞,与中断服务程序intHandle同步。

  调用函数processSl811hInterrupt()处理硬件中断,读取中断状态寄存器判断中断类型。

  调用UHC_INT_CONNECT(pHost,intHandler,pHost,&s)函数连接SL811主控制器芯片中断。UHC_INT_CONNECT是一个宏定义。

  

 

  函数intHandler完成对中断的处理,调用函数OSS_SEM_GIVE(pHost->imPending),释放用于中断和任务之间同步的二进制信号量。

(2)初始化USBD的函数

 

  函数usbdInitialize()初始化内部USBD数据结构,并依次调用其他USB驱动栈模块的入口。

  函数usbdlnitialize()调用usbdHcdAttach(execFunc,&s1811IOCfg,pToken)把HCD连接到USBD上。这里的execFunc就是函数usbHcdSl811hExee()。

  函数usbdInitialize()调用USBEnumerate(USBD_CLIENT_HANDLE clientHandle,FILE*fout)列举所有连接到系统上的USB主控制器、Hub和USB设备。

  (3)初始化USB存储设备的函数

  函数usbBulkDevInit()完成USB盘的初始化并安装DOS文件系统。

  函数usbBulkDevlnit调用函数usbdClientRegister("BULK_CLASS",&usbdHandle)及函数usbdDynamICAt-tachRegister(usbdHandle,USB_CLASS_MASS_STORAGE,USB_SUBCLASS_SCSLCOMMAND_SET,USB_INTERFACE_PROTOCOL_BULK_ONLY,usbBulkDc-vAttachCallback),建立同USB的连接,注册回调例程。

  函数usbBulkDevlnit调用函数OSS_THREAI)_CRE-ATE(bulkClientThread,(pVOID) fout,OSS_PRIORITYINTERRUPT,"tBulkClnt",&bulkTaskId),创建一个任务,管理优盘的插入和移出。

  其中bulkCliemThread例程调用pBulkBlkDev=(BLK_DEV*)usbBulkBlkDevCreate (bulkNodELD,NULL,NULL,USB_SCSI_FLAG_READ_WRITEl0);安装USB设备。 调用pBulkDosVol=dosFsDevInit("/ud0/",pButkBlkDev,NULL);安装DOS文件系统。

  (4)从优盘加载映像文件的函数

  设计USBDLoad(),实现映像文件VxWorks从优盘设备加载。USBDLoad()函数主要包括以下语句:

  

 

修改bootConfig.c文件中的bootLoad函数,加入对从优盘启动的支持。主要加入以下语句:

  

 

  重新编译、链接生成新的bootrom.hex,烧录到板子上的Flash中,将VxWorks映像文件拷贝到优盘上,将优盘插入到嵌入式主机的USB接口上。在启动的过程中,系统会自动装载优盘的VxWorks系统映像文件,实现基于VxWorks的嵌入式实时系统优盘启动。

  3 总 结

  在基于MPC860和VxWorks设计的嵌入式实验板上可实现嵌入式实时系统从优盘的启动。当然,在实际应用中还可以将嵌入式实时系统采集到的数据保存到优盘上,这样能方便地实现嵌入式设备和PC机设备资源的共享。


推荐阅读

史海拾趣

意瑞(COSEMITECH)公司的发展小趣事

在技术创新方面,意瑞半导体始终保持着高度的热情和投入。其研发团队在磁传感器芯片领域取得了显著成果,连续两年荣获闵行区的“讲理想、比贡献、奋力实现中国梦”活动的创新团队奖。此外,公司还获得了高新技术企业证书,并多次获得上海市科委的上海市科技型中小企业技术创新认可,证明了其在技术创新方面的实力。

Easy Braid公司的发展小趣事

作为一家有社会责任感的企业,Easy Braid始终关注环保和公益事业。公司采用环保材料和生产工艺,减少了对环境的污染。此外,Easy Braid还积极参与各种公益活动,为社会做出了积极贡献。这种关注社会责任的企业文化不仅增强了员工的凝聚力和归属感还提升了公司的社会形象和品牌价值。

American Power Management Inc公司的发展小趣事

在电子行业的初期,APMI以一家小型创业公司的身份出现,专注于电源管理技术的研发。当时,市场上的电源管理产品普遍存在效率低下、体积庞大的问题。APMI的研发团队通过深入研究,成功开发出了一款高效、紧凑的电源管理芯片,这一创新为电子产品的小型化和节能化奠定了基础。随着技术的不断完善和推广,APMI逐渐在电源管理领域崭露头角,吸引了众多合作伙伴和投资者的关注。

Curtis Electromusic Specialties Inc公司的发展小趣事

随着全球环保意识的不断提高,电子行业对环保材料的需求也日益增长。CUI公司敏锐地抓住了这一市场机遇,积极投入研发,成功开发出了一种绿色环保型的碘化亚铜生产工艺。这种工艺不仅降低了生产过程中的能耗和排放,而且提高了产品的纯度和质量。通过推广这一工艺,CUI公司不仅赢得了客户的青睐,也为行业的绿色发展做出了积极贡献。

ACCRETECH公司的发展小趣事

人才是企业发展的核心驱动力。CUI公司深知这一点,因此一直注重人才培养和引进。公司建立了完善的人才培养和激励机制,为员工提供了广阔的发展空间和良好的职业前景。同时,公司还积极与高校和研究机构合作,引进高层次人才和技术成果,为公司的创新发展提供了强大的智力支持。

以上五个故事框架只是基于电子行业CUI公司可能的发展路径和趋势的构想,并不特指任何具体的公司或事件。在实际情况中,每个公司的发展故事都是独一无二的,受到多种因素的影响和塑造。

AEM [ American Electronic Materials]公司的发展小趣事

在电子行业的发展过程中,AEM始终保持着对技术创新的追求。公司不断投入巨资进行技术研发,引进先进的生产设备和制造工艺,致力于提升产品的性能和品质。通过多年的努力,AEM成功突破了多项技术难题,取得了一系列重要的技术成果。

此外,AEM还积极与产业上下游的企业进行合作,共同推动电子行业的发展。通过与供应商和客户的紧密合作,AEM不断优化供应链和销售渠道,提高了公司的运营效率和市场竞争力。

问答坊 | AI 解惑

AT89S51实验板制作

AT89S51实验板做成之后,用的是并行74HC245,,第一次使用在线下载,还需要软件驱动么??? 望有这方面的经验的大虾,指点一下!!谢谢!!! [ 本帖最后由 wang7588038 于 2008-5-11 13:43 编辑 ]…

查看全部问答>

RealView MDK-ARM 4.10b 出来了~~

真够快的,文件太大,给个地址: http://www.mcu123.com/news/Soft/embsof/arm/201004/523.html…

查看全部问答>

BSP下为什么有的驱动在在PB的Catalog Item View 选择啊

BSP下为什么有的驱动在在PB的Catalog Item View 选择啊, 比如我用WinCE 6自带的Device Emulator 的BSP, 发现如果定制一个PDA设备,可以选择Battry Driver,如果选择定制一个smart phone设备,则不能选择Battery driver,旋转的话,会显示红叉。 ...…

查看全部问答>

EVC SDK下创建MFC消息处理结构,消息分发问题,高手请进!

背景:   不使用 MFC 环境, 使用EVC  WCE application.   创建 CWinComponent  为所有控件的基类         有一函数指针变量:  CALLBACK m_pfnOldWindowProc ...…

查看全部问答>

会汇编的大侠救救命啊!求动态称重的汇编程序

基于8051的轨道车辆动态称重系统,自己做了硬件,汇编的软件是在不会做,有人能帮忙么?有偿 急! 请联系QQ:287039992…

查看全部问答>

西勒振荡的问题

本帖最后由 paulhyde 于 2014-9-15 08:52 编辑 我想设计一个西勒振荡,频率在110M左右,但是我按网上的接法弄了许多不同的电容,要么是没起振,要么不频率达不到要求,而且波形不怎么好看,希望高手们帮我看怎么取值,先谢了。还有三极管的静态工 ...…

查看全部问答>

设计要求:输入交流电压220V

设计要求:输入交流电压220V,f=50Hz,输出电压12V-20V                 输出电流最大值300mA,输出保护电流400-500mA      &nbs ...…

查看全部问答>

Hello World程序出问题了,高手解决下

才学习LM3S系列,用LM3S8962写了一个串口发送数据的程序,但是结果总是不对,请高手分析分析。以下是代码和串口调试助手的数据结果。#include \"hw_ints.h\"#include \"hw_memmap.h\"#include \"hw_types.h\"#include \"gpio.h\"#include \"interru ...…

查看全部问答>

lm3s8962采样率问题!

LM3S8962号称 1MB的采样率 我看没那么快! 最近打算用LM3S8962做一个正弦波的20K频率的采样,发现采回来的数据一塌糊涂!,用1MB的去采,采回来根本不是正弦波! 相当不稳,我是用DEMO板子做的,示波器测电源5V和3.3V基本没什么杂波... 无语中! ...…

查看全部问答>

看到这么多人收到AM335x Starter Kit 了,我嫉妒,我愤怒了!

这几天忙着项目赶进度,都没时间上网,今天想起好些天没上来了,特意过来看看;本只是看看而已,没打算登录,结果看到这么多人说收到AM335x Starter Kit 了 我这个嫉妒啊,登录一下咯…

查看全部问答>