新产品新闻

更多>

  • 影响电子元器件盐雾测试...

    盐雾试验是考核产品或材料抗 盐雾腐蚀 能力的重要手段,试验结果的科学性、合理性至关重要。影响盐雾试验结果稳定性和一致性的因素很多,要提高盐...
    查看详情

    影响电子元器件盐雾测试的因素有哪些
  • 电子元器件在集成电路上...

    集成电路(integrated circuit)是一种微型电子器件或部件。采用一定的工艺,把一个电路中所需的 晶体管 、 电阻 、 电容 和 电感 等元件及布线互连一起,制作...
    查看详情

    电子元器件在集成电路上的应用
  • 硕方核心理念...

    硕方作为专注创新制造的企业, 未来的发展规划均围绕助力国产电子连接器做强为目标。 从技术升级、品质提升、行业带动三个方向细化企望。 「技术升...
    查看详情

    硕方核心理念
  • 东莞市硕方电子公司...

    硕方公司成立于2002年,专注研发制造电子开关连接器。 经过二十年发展整合,硕方逐步发展出强劲的核心竞争 优势,从原物料购入到完成品供给客户,中...
    查看详情

    东莞市硕方电子公司
  • USB Type-C主要特性...

    为了数据交换的需要,电子设备都提供了USB接口,无论是PC、平板点还是手机甚至显示设备。几乎无一例外都有USB接口。然而,由于技术标准的限制,使得...
    查看详情

    USB Type-C主要特性

行业新闻

SIM卡座App程序就需要做同样的事情

2021-10-29 17:11:19
                
0

自从几个月前接触到有Bootloader这回事,就有一种激烈的激动,念写一个BootLoader出来。很速正在飞思卡尔的Cortex-M4单片机上达成,一经是好几个月前的事变了。然后合于BootLoader的事搁正

  自从几个月前接触到有Bootloader这回事,就有一种激烈的激动,念写一个BootLoader出来。很速正在飞思卡尔的Cortex-M4单片机上达成,一经是好几个月前的事变了。然后合于BootLoader的事搁正在一边许久了,此次弄个STM32的BootLoader出来,Cortex-M3的,乘隙颁发下博客,跟大师分享一下

  又过了泰半年了吧,冉冉对BootLoader的知道也有点上进啦。东莞快充连接器希奇是跟网友道论后发觉BootLoader的达成仍旧必要靠BootLoader圭外和App圭外的配合才干寻常应用。正在这里希奇谢谢网友cary_yingj,对本BootLoader的探讨后发觉App圭外必要重定位结束向量外,才干寻常做事。

  不妨有的同砚据说过BootLoader,有的同砚没有据说过,这个都很寻常。合于BootLoader的观点大师能够上彀查一下,有较量精细的分析,我正在这里说说我本人较量局部的理会,sd卡座封装库而且是针对Cortex M3分析的,达成平台为STM32F103VET6。

  这里借用一下百度百科对BootLoader的疏解。正在嵌入式操作体系中,BootLoader是正在操作体系内核运转之前运转。能够初始化硬件装备、作战内存空间映照图,从而将体系的软硬件境遇带到一个适应状况,以便为最终移用操作体系内核盘算好无误的境遇。正在嵌入式体系中,平时并没有像BIOS那样的固件圭外(注,有的嵌入式CPU也会内嵌一段短小的启动圭外),以是扫数体系的加载启动做事就全体由BootLoader来竣事。正在一个基于ARM7TDMI core的嵌入式体系中,体系正在上电或复位时平时都从地点0x00000000处入手践诺,而正在这个地点处调理的平时即是体系的BootLoader圭外。

  BootLoader即是单片机启动光阴运转的一段小圭外,这段圭外职掌单片机固件更新,也即是单片机采选性的本人给本人下圭外。能够更新也能够不更新,更新的话,BootLoader更新完圭外后,跳转到新圭外运转;不更新的话,BootLoader直接跳转到原先的圭外去运转。

  必要预防的是:BootLoader下载新圭外后并不擦除本人(BootLoader圭外还正在),下次启动已经先运转BootLoader圭外,又能够采选性的更新或者不更新圭外,因而BootLoader即是用来拘束单片机圭外的更新。

  BootLoader使单片性能本人给本人下载圭外,因而正在圭外升级方面很是有功用。例如咱们的BootLoader是通过GSM更新圭外的,咱们正在升级单片机圭外的光阴,只须把新圭外通过GSM发送给单片机,单片机本人达成圭外更新,然后跳转到新圭外践诺,云云就省去咱们许众升级的时候啦。

  能够设念一下倘使把单片机装配正在很是高的地方,或者危急的工业现场,或者封装得很难拆下来,咱们很难直接给单片机下载圭外,那么BootLoader的功用就再现出来了。纯洁的说,有了BootLoader,咱们更新圭外的话是省心又省力。

  咱们这里是为ARM的Cortex-M3单片机写的BootLoader,必要领略一下M3内核的架构,而且要领略M3单片机是何如启动的等等。这个方面的常识,能够参考《Cortex-M3威望指南》,这里的话我只是为了达成BootLoader纯洁先容一下,大师有什么不显露的请参考威望指南。而且这里是以STM32为例分析题目的,应用的开荒境遇是RVMDK(Keil)。

  这里参考的是《Cortex-M3威望指南》的3.8节,复位序列。M3单片机复位后,从0x00000000取栈指针(SP), 从0x00000004取复位向量(PC),有了栈指针和复位向量后,单片机就遵照寻常流程运转了,正在BootLoader内里,咱们更新完圭外后必要做的程序之一即是修树栈指针,跳转到复位向量。

  栈是一种数据构造,SD卡座,晚生先出LIFO。借用百度百科的疏解:栈由编译器主动分拨开释 ,存放函数的参数值,限制变量的值等。其操作形式犹如于数据构造中的栈。它应用的是一级缓存,他们平时都是被移用时处于存储空间中,移用完毕即刻开释。

  BootLoader是一个完善的圭外,下载的新圭外(以下称为App)也是一个完善的圭外。都蕴涵结束向量外,因而的话,咱们是有两个结束向量外,信赖由于有两个向量外,大师都领略咱们应当必要对这两个向量外做点什么吧。

  单片机启动默认先运转BootLoader,因而默认的结束向量外名望是BootLoader的结束向量外。为了App能够寻常运转,下载完App后,咱们还必要把结束向量外从头定位到App圭外那里。凭据《Cortex M3威望指南》,先容一下何如重定位结束向量外。

  STM332圭外的肇端地点通常正在0x08000000。sd卡座封装库因而BootLoader圭外是正在0x08000000,不是正在0x00000000是由于STM32的重映照手艺(不吻合Cortex-M3的安排,有点搞另类的觉得)。因而BootLoader的结束向量外正在0x08000000那里。倘使咱们的App圭外肇端地点正在0x08070000,而且App的结束向量外正在肇端地点,那么BootLoader圭外下载App后,为了App圭外能无误运转,入手App圭外的运转后第一步,就要把结束向量外重定位到0x08070000那里。

  咱们领略C道话的函数名即是函数的地点,而且STM32单片机ROM的肇端地点是正在0x08000000,那么应用编译器编译圭外的话(这里应用的是RVMDK),USB连接器,函数的地点默认都正在以0x08000000为首的一段ROM内里了。例如咱们一个函数Delay(),它的地点能够是0x08000167(Cortex M3中函数的地点0bit位通常是1),也即是Delay函数的代码正在0x08000167,C道话函数移用Delay时,即是践诺0x08000167的代码。

  咱们必要预防的题目是,倘使不删改圭外默认的肇端地点的话,那么BootLoader和新App圭外的肇端地点都是0x08000000,也即是他们重叠了(代码重叠),云云的话必定互相之间有影响,圭外是不行寻常做事的。

  这里的管理措施是,BootLoader圭外已经占用0x08000000为首的那段ROM,由于STM32的默认即是从0x08000000运转圭外的。依旧BootLoader圭外先能无误运转。sd卡座封装库然后App应用除BootLoader占用ROM以外的空间。这里需措施略BootLoader事实占用了众少ROM,很纯洁,查看MAP文献就行了。这里以我的BootLoader的MAP文献为例分析一下,

  紧要是这句线”,这句话分析了我的BootLoader圭外是从0x08000000入手,占用了0x00006DA4巨细。只须咱们的App不要和BootLoader圭外占用的空间冲突就能够了。我的App圭外的肇端地点采选为0x08070000,不与BootLoader圭外冲突。的确何如删改ROM肇端地点,下面先容。

  平居咱们用j-Link或者串口下载圭外的话,都是翻开hex文献下载的,由于hex文献蕴涵地点消息,下载圭外的光阴领略圭外下载到ROM的哪个区域。从另一个角度上说,也即是hex文献是不行直接写进ROM的,一边写必要一边转换(解码出地点消息,将对应实质写入ROM)。

  默认境况下编译后天生的是hex文献,然而很轻松能够天生bin文献。先容的确何如天生bin文献,东西的话是应用fromelf.exe(目次通常是正在Keil装配目次内里,自己的fromelf.exe目次是正在C:KeilARMARMCCbin),咱们是应用fromelf东西将axf文献转换为bin文献。

  下令能够分为五个人,简化后是fromelf--bin-oxxx.binxxx.axf,sd卡座封装库必要预防的是下令的五个个人之间要有空格。还必要分析的是道途题目,这里的道途都是相对.uvproj文献的,下面是我的目次(预防MY_STM32.uvproj文献和Output文献夹)。

  咱们的BootLoader是从SD卡更新圭外的,把正在电脑上编译后的App圭外,也即是bin文献,复制到SD卡中,然后让单片机读取相应的bin文献,就能够达成圭外的更新。必要预防的是,App圭外必要删改ROM的肇端地点,再编译,而且要天生bin文献才援救寻常下载。

  要达成BootLoader,又有一个条件是能够写入Flash了。倘使是STM32单片机的话是很容易达成的,由于咱们有官方库。自己应用的是3.0.0版本,参考官方例程,很容易达成Flash的读写,这里同样是为了达成BootLoader纯洁先容一下。

  这一节要集合上面提到过的,Cortex-M3启动做了什么事变,然后咱们的BootLoader下载App圭外后,App圭外就必要做同样的事变。紧要有三个程序,个中BootLoader圭外必要做的是:跳转到复位向量;App必要做的是:1, 重定位结束向量外 2,修树栈指针。

  预防 ( (void (*)()) (Reset) )();是一去就不返回的,践诺完这条语句,单片机就直接跳转到App圭外运转的,因而BootLoader圭外下载完App后,做极少纯洁的惩罚(凭据本人的利用,也能够不做任那处理),就用这条语句跳转到App践诺。

  至此,BootLoader达成程序完了,信赖熟习了这几个程序后,大师能够本人给本人的单片机写个BootLoader。乘隙说一下,Cortex-M4的BootLoader跟Cortex-M3简直是相同的。我正在STM32上的达成全体是参考本人前次正在飞思卡尔Cortex-M4上的达成。下面说一下我的主函数吧,咱们再看看的确的BootLoader流程,再熟习一下BootLoader。