当前位置:首页 > 电源 > 数字电源
[导读]本文首先介绍常见的Flash编程方法,然后详细介绍本文方法的原理,以及DSP系统上电加载原理,最后给出整个实现过程并分析了Flash编程时需要注意的一些问题。  Flash编程方法  常见的Flash编程方式  Flash在正常使用

本文首先介绍常见的Flash编程方法,然后详细介绍本文方法的原理,以及DSP系统上电加载原理,最后给出整个实现过程并分析了Flash编程时需要注意的一些问题。

  Flash编程方法

  常见的Flash编程方式

  Flash在正常使用前必须写入用户程序,传统上有3种编程方法:由供应商出货前把程序代码写入Flash、编程器编程和在系统编程

  第1种方法不能满足用户更改代码的需求,所以在开发阶段不宜采用。当使用编程器编程时,要求Flash固定在PCB板前必须把用户程序写入片内。因此,现在一般都优先考虑在系统编程方法,首先应确定所选的DSP是否直持在系统编程。现行的在系统编程的方法一般是先把待加载程序(用户程序)的.out文件(COFF格式)转成HEX格式,然后去掉HEX格式文件的文件头,再通过烧写程序写到Flash里去。也可以不进行COFF格式到HEX格式的转换这一步,把COFF文件作为源文件,去除文件头信息后将其写入Flash。

  编程原理

  本文的实现方法比较简单,首先把用户程序映射到系统RAM,再把用户程序作为数据直接从RAM搬入Flash中。

  首先在CCS上完成用户程序,生成可执行的.out文件,将该文件设为文件1进行加载;然后加载烧写程序的.out文件,将其设为文件2;最后运行文件2,通过它把文件1烧入Flash。

  操作步骤非常简单,这里要说明几点。首先,2个.out文件各自独立,文件2加载后,文件1成为数据,CCS在运行时,运行的是最新加载的程序,也即文件2。其次,文件2与文件1映射到RAM中的物理空间各自独立,也就是文件2不能映射到文件1已映射的地方,如果发生重叠,文件2的内容就会覆盖原先文件1映射到该地址空间的内容,写入Flash的内容就会发生错误。再次,用户程序里包括了二次加载程序,以在自举时把用户程序从Flash还原到RAM中。

  总线周期

  命令1 2 3 4 5 6

  序列地址 数据地址 数据地址 数据地址 数据地址 数据地址 数据

  软件复位XXXF0

  芯片擦除XXXAAXXX55XXX80XXXAAXXX55XXX10

  扇区擦除XXXAAXXX55XXX80XXXAAXXX55SA30

  字节写XXXAAXXX55XXXA0PAPD

  表1 Am29LV033C内存指令表

  二次加载和Bootloader

  要保证用户程序的正确运行,仅把程序写入Flash是不够的,必须保证上电后,程序能够从Flash中正确恢复到RAM。系统上电工作步骤如图1所示。

  

 

  图1 系统上电的工作步骤

  DSP首先自检,得到程序的加载模式。在C6000中主要有2种模式,一种是主机加载模式,也即DSP从0x0000 0000开始执行程序;另一种是ROM加载模式,该模式又有8位、16位、32位几种,不同的DSP略有不同,这里选用8位ROM模式。工作时,DSP先从地址0x9000 0000开始,把0x9000 0000~0x9000 0400这1K(在C62xx中是64K)的数据搬到0x0000 0000~0x0000 0400,然后再从0x0000 0000开始执行程序。这一次加载由DSP自行完成,但是1K的程序作为用户程序显然不够,因此,这1K的程序要做成加载器,也就是手工写的Bootloader,利用它把用户程序从Flash搬入RAM。加载器搬运用户程序又是一次加载,因此把这个过程统称为二次加载。

  Bootloader要完成两项功能,第一,把其它程序搬到指定的地址;第二,跳转到用户程序入口,这里要先修改ISP,再跳转到复位中断,因此在Bootloader的最后总是一条跳转指令。由于Bootloader在Flash中的位置是0x9000 0000~0x9000 0400,而Bootloader又是放在用户程序里的,因此,为了方便烧写程序把Bootloader写到该位置,这里在用户程序的.cmd文件中把bootloader定位在程序段的起始位置。[!--empirenews.page--]编程方法实现

 

  系统配置和参数设置

  TMS320DM642是TI公司的一款视频图像DSP,工作时钟最高可达到600MHz。程序存储器最大可调至272M×8位,其EMIF接口分4个空间,即CE0~CE3。Flash映射到CE1空间,其地址为0x90000000~0x90400000,上电时采用8位ROM加载方式。

  Am29LV033C是AMD公司生产的Flash存储器,其主要特点有:3.3 V单电源供电,可使内部产生高电压进行编程和擦除操作;只需向其命令寄存器写入标准的微处理器指令,具体编程、擦除操作由内部嵌入的算法实现,并且可以通过查询特定的引脚或数据线监控操作是否完成;可以对任一扇区进行读、写或擦除操作,而不影响其它部分的数据。

  由于4MB的Flash ROM有22根地址线,而DM642只有20根地址线,因此加入FPGA,对Flash进行分页,这里共分8页,每页512KB,每页内含8块,每块64KB。

  Am29LV033C有多条内存指令,可以实现芯片ID的读取、软件复位、整片擦除、块擦除等。在这里主要介绍烧写时用到的指令,其擦写命令如表1所示。表中的XXX表示任意地址,SA为块地址,即地址线的第16位到21位,PA为烧写地址,PD为烧写数据。

  待烧写程序(用户程序)为USER.out,大小为2M;烧写程序为FBCT.out,大小为4K,地址分配如表2所示。

  编程过程

  第一步,对整个Flash进行一遍擦除。因为Flash在编程时只能把“1”置为“0”,而不能把“0”置为“1”。

  第二步,判断擦除结束。通过DQ6、DQ7均可完成判断,当DQ6位不再跳变时说明擦除结束。这里通过读取最后一位数据是否为“0xFF”来完成判断。

  第三步,进行软件复位。软件复位使Flash处于就绪状态,当Flash在进行擦除、编程时软件复位信号无效。

  第四步,取得编程地址。如果地址超过最大地址则编程结束。

  开始地址长度写入Flash的开始地址

  USER.out0x800000002M0x9001 0000

  bootloader0x0000 00001K0x9000 0000

  FBCT.out,0x300000004K--

  表2 程序的地址分配

  注意事项

  对于不同的DSP,不同的Flash,在实现时可能不一样,这里有几个问题必须注意:

  (1) 文件1和文件2的.cmd文件要分配好各自的地址,地址空间不能重叠。

  (2) 不是每个DSP都可以实现在系统编程,如TMS320C6204就不行,而C621x,C64x等就可以。原因在于Flash在编程时速度较慢,一般为ms级,所以需要WE#信号的有效时间较长。但是,一般的WE#有效时间都只有几十ns,这么短的时间不足以让DSP把内容写进Flash。C64x等之所以能实现在系统编程,是因为在编程时DSP自动延长了编程的有效时间。

  (3) 如果用户程序中不含加载器程序,那么用户程序的目的地址就不能从Flash的前1K地址开始。

  (4) 不同型号Flash的编程时序和指令可能会有所不同,编程之前要弄清该Flash的编程时序和指令。如果Flash要求有偏移地址,就需要加上基地址。

  (5) 对于程序的未初始化段不必烧入Flash,可以参考.map文件,里面对于各段有详细说明。

  

 

  图2 程序流程

  结语

  利用上面的方法,本文在TMS320DM642平台中通过JTAG仿真头,成功地实现了在系统编程,为程序的调试提供了一种非常方便的手段,也为用户程序的升级提供了一种简单易行的方法,同时这个方法也在C6211环境下成功实现,其它DSP同样可参考本方法。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

Matlab和C语言的区别是:1、用途不同;2、语法不同;3、运行速度不同;4、可移植性不同;5、代码管理不同。Matlab是一种数值计算和科学计算工具

关键字: matlab语言 C语言 系统编程

写作目的: 学习 Linux 文件模型相关的知识。 正文目录: 1. Linux 的两大抽象 2. 文件类型 3. 文件描述符 4. 通用文件模型:简介     4.1 演示 demo     4.2 相关要点: 与 V...

关键字: 模型 系统编程

人们很容易高估某个决定性时刻的重要性,也很容易低估每天进行微小改进的价值。以前我也以为大规模的成功需要大规模的行动,现在我不这么认为了。长期来看,由于复利效果,一点小小的改进就能产生惊人的变化。 还有一点值得注意的情况,...

关键字: 信号 系统编程

CC2640 R2是德州仪器推出的面向 Bluetooth Smart 应用的低功耗无线 MCU。该芯片运行TI的BLE协议栈,具有功耗低,外设种类丰富,射频性能好等特点。利用它可以实现许多有趣的应用,收到了用户的广泛欢...

关键字: 芯片 烧写程序 BOOTLOADER KD

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。 尽管C语言提供了许多低级处理的功能,但仍然保持着良好...

关键字: C语言 嵌入式系统 系统编程 CE

在大学的时候很少关心单片机内部存储器的结构及应用,只是大概的知道RAM和ROM的区别,甚至只是知道程序下载到ROM中就能运行了。其他的如何工作程序如何启动的就不了了知了。

关键字: 存储器 BOOTLOADER 嵌入式设计 LOADER

0 引言Bootloader通常称为系统引导加载程序,是系统加电或复位后执行第一段代码[ 1 ]。一般它只在系统启动时运行非常短时间,但对于嵌入式系统来说,这是一个非常重要系统

关键字: BOOTLOADER NANDFLASH 内核 CK

摘要: 近年来,在系统编程(ISP)技术的不断发展和成熟,使得硬件设计逐步软件化,硬件结构的通用性日益增强,系统设计、生产、维护、升级等环节都发生着深刻的变革。本文以

关键字: 系统编程 W78E516 ISP 微控制器

摘要:针对目前基于单片机的产品和C8051F410单片机特色,提出了一种使用UART接口进行程序升级的实现方法,并对实现此功能的关键技术点做了相应分析,使程序更加实用、可靠,所有代码使用C语言进行实现。此方法具有一

关键字: BOOTLOADER 单片机 C8051F410 ADDR

摘要:该系统是以TMS320DM642为核心,结合视频编解码芯片,并外扩大容量的存储器,实现4路视频输入与1路视频输出。本文主要介绍了基于TMS320DM642的视频监控系统的硬件设计,主要包括视频输入/输出模块的设计...

关键字: 硬件设计 视频监控系统 TMS320DM642 引脚
关闭
关闭