DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 345|回复: 0
打印 上一主题 下一主题

ARM系统代码固化的串口实现(下)

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-27 19:27:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

  
         
    2.2  烧写主程序设计
  Main函数功能主要包括接收串口数据、解析映像文件及写入外部Flash,如图3所示。串口函数主要由init_sio()、init_val()和send_data()组成。函数init_sio()用于对串口通信参数的设置:波特率,57 600 b/s;奇偶校验,无;数据位,8位;停止位,1位。init_val()是对接收到的数据进行转存,为了提高接收速率,把接收到的数据先暂存到外部SRAM中。如果程序量较小也可以选择暂存到芯片内部的RAM(64 KB)中,等接收完毕后再对其进行解析。send_data()用于向串口回送烧写工作的信息。


740)this.width=740" border=undefined>
  下一步就是要对映像文件进行解析并正确地写入外部Flash中。嵌入式程序通过编译器生成的映像文件是elf格式的axf文件,里面有文件头、段信息等信息,不能直接烧录,一般将它转化为bin或者hex文件。这里将嵌入式程序编译成SRecord十六进制文件。这是一种Motorola公司推出的标准文件格式,用来将数据从PC机传送到目标平台Flash,在嵌入式开发中广为应用。SRecord文件格式如下:


740)this.width=740" border=undefined>

  其中,SID表示当前记录的类型,常见的有S0、S1、S5和S9等,各个类型代表的意义不同,如S9所在语句表示文件的结束;数据长度代表本句后面数据的长度;地址的字节数会因不同的S记录而异,一般为2字节,表示的是后面的数据在存储器中的地址。
  一个S记录的长度不会超过78字节,所以每次读数据的长度设为78字节,通过判断文件类型(如S3为0x5333)的标志位来确定一个S记录的开始。解析过程就是根据SID确定数据长度,截取数据部分,传递要写入Flash中的地址。
  最后一步就是如何将数据写入Flash。不同类型Flash存储器的编程与擦除指令也不太一样。本系统使用的是Hyundai公司生产的HY29LV160。
  向Flash存储器的特定寄存器写入地址和数据命令,就可对Flash存储器进行烧写、擦除等操作。编程指令只能使“1”变为“0”,而擦除命令则可使“0”变为“1”,因此正确的操作顺序是先擦除、后编程。当Flash被擦除后读出的数据应为0xff。写指令编程如下:
  *((volatile uint16 *)start_addr + addr_unlock1)=data_unlock1;
    start_add为Flash起始地址,addr_unlock1为0x555,//data_unlock1为0xaaaa
  *((volatile uint16 *)start_addr +addr_unlock2)= data_unlock2;
    //addr_unlock2为0x2aa,data_unlock2为0x5555
  *((volatile uint16 *)start_addr +addr_unlock1)= setup_write;
    //setup_write为0xa0a0
  *to_add=data_pra;//写入数据
  应在每个单元烧写命令发出后进行检测,以保证前一个单元烧写结束后再进行下一个存储单元的烧写,当然也可采用延时等待的方法进行连续的烧写。
2.3  编译与执行
  由于日本OKI公司的小灵通芯片ml7338是基于ARM7tdMI核,所以系统采用ARM集成开发调试环境ADS1.2,使用TechorICE仿真器。具体编译语句如下:
  armlink Startup.o main.o
  -rw-base 0x10000000
  -first Startup.o(vectors)//中断向量表位于映像头部
  -o loader.axf
  -info totals
  其中,0x10000000是ml7338内部RAM的起始地址,编译完成后生成loader.axf文件。
  需要注意的是,要固化的代码应转化为SRecord文件。可在编译器下ARM fromELF﹥Output format中选择Motorola 32 bit Hex,或者使用以下编译语句处理:
  >fromelfnodebug filename.axfm32 filename.txt
  以上两种方式都将产生SRecord文件。通过仿真器把烧写程序下载到ml7338的内部RAM中,运行后即可固化PC端通过串口工具发送过来的应用程序代码。固化完成后拔掉仿真器,当系统复位或上电后Flash存储器被映射到起始地址0x0处,装入的可执行映像文件即可得到执行。
结语
  本文所写的烧写程序虽然是针对小灵通芯片ml7338的,但是已经把它拓展到了基于ARM的32位嵌入式系统,开发人员只需对框架略做修改即可编写自己的烧写程序。整个系统采用ARM汇编语言和C语言开发,因此可以方便地移植,而且对编写基于网口的监控程序也具有重要的参考价值。
参考文献
[1]  杜春雷. ARM体系结构和编程[M].北京:清华大学出版社,2003.
[2]  OKI.ML733801 Baseband LSI for PHS,2006-05-29.
[3]  孙昊,曹玉强,杜秀芳.ARM处理器启动代码的分析与编程[J]. 工业控制计算机,2005(11): 54-55.
[4]  李驹光. ARM应用系统开发详解[M].北京:清华大学出版社,2004.
陈建明(研究生),主要研究方向为多媒体通信与技术;
章坚武(博士后、教授),主要研究方向为移动通信与个人通信
唐兵(研究生),主要研究方向为通信网络与终端技术。[1]
         
          [/td]
        [/tr]
      
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-11-16 18:34 , 耗时 0.081941 秒, 19 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表