TI C2000系列DSP FLASH烧写解决方案.ppt_第1页
TI C2000系列DSP FLASH烧写解决方案.ppt_第2页
TI C2000系列DSP FLASH烧写解决方案.ppt_第3页
TI C2000系列DSP FLASH烧写解决方案.ppt_第4页
TI C2000系列DSP FLASH烧写解决方案.ppt_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ti c2000 系列dsp flash 烧写解决方案,ver a.,综述,ti c2000系列dsp从硬件构架和开发环境上可以划分为f28x、f240x、f240与f206几类。而flash的烧写问题一直是开发过程中,编程人员比较关注的问题。 本文从最后出现的f28x的flash烧写方法开始,依次介绍这三种dsp的flash烧写的方法和步骤。 首先是详细介绍f28系列的烧写工具和方法 由于c2000系列dsp的烧写方法大同小异所以简要描述f240与f206的烧写方法,并归纳和总结f240x烧写的一些经验 最后一部分以f2812为例介绍用户自定义的嵌入式flash编程(api),第一部分: tms320f28x flash 烧写指南,第一章:f28x flash 特点和应用,这部分主要讲述以下几方面内容: f28x flash的特点 f28x flash的存储器映像 f28x flash的电源模式 f28x flash的访问 f28x flash流水线 f28x flash的寄存器,f28x flash的特点,f2812片内flash 128k,地址为3d8000h-3f7fffh。 f2810片内flash 64k,地址为3e8000h-3f7fffh。 即可映像到程序空间,也可映像到数据空间。 采用分区操作可单独擦写某一个区段。 可以通过单独的、可改善性能的flash流水线进行操作。 基于cpu频率可进行调整的等待周期。 低功耗模式。 受代码安全模块csm的保护。,f28x flash的存储器映像,f2812存储器区段地址,f28x flash的存储器映像,f2810存储器区段地址,f280x 与f281x 在flash上的差别,f280x与f281x在flash的结构和烧写的方法上是完全相同不同点如下: 从容量来说是依次减小的,同时段的长度也是不断变化 f2808: 64k x 16 flash f2806: 32k x 16 flash f2801: 16k x 16 flash api的算法和配置是不同的,并且相互之间不兼容性 其他相关内容请参照相对应的用户手册,本文以f281x为主,f28x flash的电源模式,复位和休眠状态复位状态、最低功耗 待机状态 cpu读和取指访问都将暂停cpu 激活或读状态 最大功耗 变为低功耗:改变pwr模式位 变为高功耗:改变fpwr寄存器 通过读访问或程序取指操作,f28x flash的访问,cpu对flash的读或取指操作有如下形式: 32位取指指令 16位或32位数据空间读操作 16位程序空间读操作 存储器访问类型: flash存储器随机访问 flash存储器页访问 notes:对存储器应先取得写操作被忽略 保护后读操作是正常的周期但返回0 支持零等待访问但cpu需要适应访问时间,f28x flash 流水线模式,flash一般用于保护用户代码。为了改善代码执行性能,采用了flash流水线模式。 通过fopt寄存器中的enpipe位控制流水线模式使能 该模式独立于cpu流水线 该模式下使用了预取机能,减少了flash对整个代码执行过程的影响。 改善了flash代码执行效率。,位0 enpipe 使能流水线/流水线使能时等待状态必须大于0,f28x flash 寄存器,flash选择寄存器fopt flash电源寄存器fpwr flash状态寄存器fstatus flash待机等待寄存器fstdbywait flash待机到激活等待计数器寄存器factivewait flash等待状态寄存器fbankwait 以上寄存器的设置,已经包含在相应的flash烧写工具中。不在此详细介绍,可以通过ti的相关文档和ccs中包含的用户手册进行查询。flash的烧写过程不包括这些寄存器的设置,对参数设置的过程实际上就是通过ti或第三方软件对寄存器的设置。,第二章: f28x flash烧写基础,本部分主要讲述以下几方面内容: flash烧写的硬件条件 flash算法相关描述 flash的烧写步骤 -擦写操作 -编程操作,f28x flash 烧写的硬件条件,具备什么样的硬件条件才可以进行烧写 flash操作 flash必须是完好的。 flash有可能因为意外导致毁坏,比如在擦写过程中断电或死机。此时虽然dsp程序可以在ram中运行但是除非更换dsp,否则无法再进行flash烧写。 csm必须是可用的。 您必须是设备的合法使用者。flash受csm的保护。flash的烧写必须处于非安全模式下(csm unlock)。 vdd3vfl管脚必须可靠接到3.3v电源上。 flash的编程和读出都需要这个电源,必须被连接。 notes: 当该电源未连接时,口线输出也有可能是3.3v。而且某些ti评估板上在此处放置了跳线或未焊接的电阻封装。因此必须通过相应测试切实保证这个电压正常。,f28x flash 执行算法的一般要求,f281x的设备编程以后是通过时间边缘算法 (time-critical algorithms)在dsp上执行的 这个算法包含一个时间边缘的延时环 这个算法必须在单周期的saram中执行 必须根据dsp的时钟频率来设置这个算法 为了保证程序可以正确执行,应该在系统最快的时钟频率上执行这个算法 这个算法绝对不能使用中断 这个算法是flash编程的基本构架算法,它可以通过相应的插件、工具或自行编写的api程序实现。以上是flash烧写的基本要求。,f28x flash 编程算法的操作,flash烧写的操作包括如下两个基本步骤: 擦写 擦写算法的执行结果通常是将flash的一个段中的所有的位都置成1。 这个擦写算法包含以下3个步骤: 擦除:将一个段中所有的位都置0。 擦写:将一个段中所有的位都置1。 效验:纠正所有耗尽的位,保证所有位都变成1。 编程 编程算法的执行结果是将应用代码或数据中的特定位改写成0。,f28x flash 的擦写操作,flash擦写操作的相关描述 flash的出厂设置是已经擦写过的状态。也就是所有flash段中的位都是1。 这个擦写算法是将一个段中所有的位都置1。 一次可以擦写的最小内存单元是一个段。 擦写操作只适用于flash,otp不能进行擦写。,f28x flash 的编程操作,flash擦写操作的相关描述 编程操作使flash中某些特定的位变成0 编程操作不能使某一个位由0变成1 编程操作可以对flash和otp进行操作 编程操作每次操作是针对16位中的一位进行,f28x flash 烧写方法概述,ti及其第三方提供的烧写软件主要有两种: 一个是ti提供的tms320c2000 code composer studio on-chip flash programmer plug-in。其最新版本是1.1102。发行日期是2005-1-11,可以从ti网站上下载或者向seed索取。(www.ti.com) 另一个工具是spectrum digital公司提供的sdflash。 这个软件在ti的ccs插件推出之前比较受欢迎,但是有 了上面更方便的插件以后因为使用的限制用得比较少。 其最新版本是1.63。包含在ccs2.21以上的版本中,当 然也可以单独下载升级包进行安装。可以从其官方网站 或者向seed索取。() 接下来的两章分别介绍这两种工具的使用。,第三章: f28x flash ccs插件,code composer studio plug-in 的特点: 完美的整合到ccs中,并且提供大量的ti在线帮助 开发特定的ccs flash设备并且提供了多样的设定。 不需要关闭ccs和开关工具即可实现flash烧写和设置 支持ccs2.2及以上版本,f28x ccs插件的功能框图,f28x ccs 插件的安装,1.安装ccs c2000v2.2 2. 安装2.2 to 2.21补丁c2000-2.20.00-full-to-c2000-2.21.00-full 3. 安装c2000-2.00-sa-to-ti-flash2x到ccs目录。 4. 设置好ccs,打开ccs系统自动提示发现插件点击确认使插件生效。,f28x ccs 插件的调用,点击toolsf28xx on chip flash programmer。 点击插件图标。,f28x ccs 插件的界面,f28x ccs 插件的api设置,图中所示的api为经过确认的版本,而不是beta版如果没有这个版本,则说明下载的插件版本不够新可能无法正常烧写f281x,f28x ccs 插件的频率设定,f28x ccs 插件频率配置的测试,note:toggletest 不会自动停止必须通过用户手动停止(后面api的相关部分在使用时也存在同样的问题),f28x ccs 插件的烧写步骤,现在描述一下如何通过ccs插件完成一个程序的烧写 step 1 : 选择一个工程。这个工程应该是调试通过的,并且可以在ccs调试状态下正常运行。 step 2 : 对这个工程的cmd文件进行增加flash的内存分配的内容。最好同时编制两份cmd文件:一份给烧写flash用,一份仿真和试验使用。 step 3:需要时对工程的文件进行修改,增加flash api、程序搬移等文件。以扩展程序的有效运行和应用。,f28x ccs 插件烧写步骤,step 4 : 编译这个文件以生成插件可识别的coff文件 step 5 : 打开ccs插件,设置时钟和相关内容 step 6 : 配置插件的api step 6 : 测试时钟和工作频率 step 7 : 选择需要擦写的段 step 8 : 选择擦写、编程、效验的集合操作 step 9 : 选择执行操作等待插件自动执行烧写过程 设置硬件跳线 gpiof4_scitxda 为高(硬件已设置好),则上电后,复位矢量直接跳转到flash处执行 至此一个使用flash的烧写全过程就执行完了,在去掉仿真器的情况下上电程序就可以自动执行了。,f28x ccs 插件烧写的一些经验,在擦写的过程中意外或异端终止有可能造成flash烧毁 通常的非破坏性的错误操作不会影响到csm,但是要注意scm也在flash,不要将此段地址烧入内容 不要试图将flash所有位置0,这样csm将永远是安全的也就是说该芯片不能再调试和编程 通常flash毁坏dsp依然可以进行不牵扯flash的仿真和调试 ccs插件有时候会出现死机。但并不意味着flash已经毁坏通过再次或不同环境下的烧写有可能挽救和恢复 绝对不可以在烧写过程中断电 烧写过程中不要试图运行程序 对flash自由等待和页等待的设置可以提高flash执行速度,理论最大120mhz。,关于f28x ccs 插件,除了上述问题外ccs插件因为软硬件bug还可能出现一些意料不到的问题。以下列举了一些常见的不正常状况和相应的解决方法。 1. 上电初始ccs处于运行状态烧写时出现错误提示不能正常进行。 -flash本身已经有程序,需停止后再进行烧写。 2. 烧写过程中程序死在擦除状态,关掉ccs插件再开状况依旧。 -硬件重新上电并重启ccs,同时移除所有断点。 3. 在没有非法操作时出现flash不能正常unlock。 -通常需要在其他系统中重新烧写一次flash后,插件恢复正常。 4. 烧写过程中出错并且无法正常进行。 -按上述1-3步骤进行,同时需要检查硬件电压和软件版本支持。 5. 烧写完成但是程序运行错误或者过度缓慢。 -需要关注相应的设置和系统是否处于正常状态。 必要时有可能需要重新安装ccs和插件,第四章 sdflash,sdflash烧写工具的特点: sdflash是spectrum digital公司推出的flash编程接口 sdflash不依赖于ccs可以独立的运行。只需要连接设备的jtag 仿真器上电就可以进行 jtag 编程 不支持usb仿真器 工程的组织形式与ccs略有不同 适合于大批量芯片的烧写,sdflash的功能框图,sdflash 工程,sdflash工程由文本文件用储存用户的擦写和编程设置,通过 sdflash gui 界面可以观看和编辑sdflash工程 在ti的例程中包含了算法文件在自建工程时可以借用,sdflash 设置-目标,sdflash 设置-擦写,sdflash 设置-编程,sdflash 频率配置,在sdflash28x_wrapper.h中进行pllcr 的相关设定 通过修改 flash281x_api_config.h进行cpu频率的设定 重建算法文件 关闭ccs 运行频率触发测试来检验cpu频率设置,ccs中的sdflash jtag算法工程,sdflash 频率配置2,sdflash 的操作步骤,打开工程/新建工程。新建工程时算法文件和各项设定参考ti提供的例程,一步一步的建立 programming setting参照前几页的叙述将擦写、编程、效验各个参数设置好 点击deviceflash 选择所需操作 点击start 由此可见在参数都设置好的情况下,当有大量芯片需要烧写时不必每次都开关ccs。这也是sdflash的一大优势。但是在程序调试过程中还是推荐通过插件来进行。,sdflash 的一些经验,在设置时最好参照ti的例程 烧写28时为了免除麻烦最好直接下载最新的版本 当cpu不能复位时,可以先使用sdconfig来进行复位 新建工程中推荐套用ti例程的框架,这样快速又不容易出现错误 出现问题及时参看其说明和帮助,其中大部分的异常情况的解决方法都写得很清楚 此软件的灵活度不高,参数操作又比较繁琐。所以一般来说还是推荐由ti的插件来进行操作,要方便许多 必要时配合ccs使用,关于28x flash 的执行,1)选用合适的cmd文件,分配flash和其他存储器,可以参照dsp281x f2812.cmd 2)确保在0x3f7ff6处有指令跳转到代码执行的开始可以参考dsp281x_codestartbranch.asm来实现 3)如果要flash有最好的性能,需要设置flash存储器的等待周期该设置程序需要copy到ram中运行,可以用dsp281x_memcopy.c来实现(参考如下内容) #include “dsp281x_device.h“ void memcopy(uint16 *sourceaddr, uint16* sourceendaddr, uint16* destaddr) while(sourceaddr sourceendaddr) *destaddr+ =*sourceaddr+; return; notes:flash体系强制限制一次只执行一个操作,也就是说在擦写编程过程中无法在flash中执行程序或读取。所以在使用api并且将程序写到flash中时这一步是必须的。,关于28x flash 烧写的补充说明,2812烧写补充说明: 算法不但不能在flash运行而且不能在外部存储器xinxf中运行(spra958) sdflash和ccs不要在同一时间内执行(gui sdflash readme) ccs插件执行过程中应移除所有断点 flash memory programming setup(tiweb)中有更详细的设计和操作描述 对于280x和281x的不同请参照(tms320x281x to tms320x280x migration overview) 对于2810 api程序只能擦写a-e段注意不要过界使用,第二部分: tms320f240x/240/206 flash 烧写指南,c2000 flash 烧写综述,对于c2000系列其他dsp的flash烧写的问题主要也是通过sdflash和ccs插件来实现基本方法是一致的不再累述,本部分主要描述一下他们的差别。 以下连接对c2000系列的dsp flash编程工具的下载页面 /docs/catalog/devtools/overview.jhtml?templateid=5121&path=templatedata/cm/toolswovw/data/tools_flash 烧写过程中应该下载相对应的软件和驱动。下图列出了ti及其第三方推荐和提供支持的c2000系列全部烧写工具,c2000 flash 烧写综述,c2000 flash 烧写基本上都可以通过ccs插件进行也推荐这种做法,f24x的编写需要在windows下的dos窗中进行。使用sdflash的烧写不再累述,需要时注意看相应的readme。 有几点需要注意: a.必须为mc方式; b.f206的工作频率必须为20mhz; c.f240需要根据pll修改c240_cfg.i文件。建议外部时钟为 20mhz。 d.lf240x也可能需要根据pll修改文件,工作频率为30mhz。 e.如果编写有问题,可以用bflwx.bat修复。 ti还提供了一种串口编写方式:ti的网页上有相关软件。注意此法只能编写一次,因为编写程序会破坏串口通信程序。 api方式:请查阅ti的网页上有相关资料。,f206/240 flash 烧写,tms320f206片内有32kx16bit的flash,从0x000h0x003f为中断向量区。当mp/mc引脚等于0时,片内flash 使能,当mp/mc引脚等于1时,影射到扩展程序空间。f206复位后从0x0000h开始执行程序。 烧写步骤: 1、设置mp/mc=0,使能片内flash。连好仿真器。 2、安装falsh2xx烧写软件。 3、开启ccs。 4、使用file- load program 载入需要烧写的文件 5、使用file-data-save 存储刚载入的程序数据到主机文件中(*.dat*.out)。指定文件名后,ccs提示输入数据的起始地址,数据长度,内存页类型。设置完成后确认。 数据将存储到您指定的目录与文件名中。 注意: 内存页类型请选择program,f206/240 flash 烧写,6、 使用file-load gel 加载gel文件(如:烧写f240的程序,就加载c:flash2xxflash240 fprogram.gel文件到系统中。加载成功后在ccs系统菜单中的gel下面出现 flash编程及子项flashclear,flasherase, write2flash 7、 顺序使用gel-flash 编程- flashclear, gel-flash 编程-flasherase 对flash进行擦除。flashclear后flash中所有数据为0,flasherase后flash中所有数据为1。 8、 使用gel-flash 编程- write2flash,系统提示输入要烧写的数据文件、数据长度。此处输入的烧写数据文件是第三步存储的数据文件及其数据长度,输入文件名时请务必使用此格式:(假设数据文件sample.dat存在c:flash2xxflash240 中其格式为 “c:flash2xxflash240sample.dat” 引号必须) 9、 数据输入完成后点击execute按钮。烧写flash工作完成。,f240x 烧写说明,f2407的烧写与f28x基本相同这里仅将注意事项列出: 1、关于flash时钟的选择,此烧写工具默认最高频率进行flash的操作。根据目标系统的工作主频重新要进行pll设置。方法:先在advance options下面的view config file中修改倍频。存盘后在相应的目录下(tic2xxalgos相应目录)运行buildall.bat就可以完成修改了。再进行相应的操作即可。 2、若是你所选的频率不是最高频率,还需要设定你自已的timings.xx来代替系统默认的最高频率的timings.xx。例如lf2407a的默认文件是timings.40。timings.xx可以利用includetimings.xls的excel工作表来生成。然后在advance options下面的view config file中修改相应的位置。存盘后,在相应的目录下运行buildall.bat就可以完成修改了。,f240x 烧写说明,3、对于tms320lf240xa系列,还要注意:由于这些dsp的flash具有加密功能,加密地址为程序空间的0x40-0x43h,程序禁止写入此空间,如果写了,此空间的数据被认为是加密位,断电后进入保护flash状态,使flash不可重新操作,从而使dsp报废,烧写完毕后一定要进行program passwords的操作,如果不做加密操作就默认最后一次写入加密位的数据作为密码。 4、2407a不能用dos下的烧写软件烧写,必须用ccs插件,f240x 烧写说明,5、一些相关建议如下: 1)一般调试时,在ram中进行; 2)程序烧写时,避开程序空间0x40-0x43h加密区,程序最好小于32k; 3)每次程序烧写完后,将word0,word1,word2,word3分别输入自己的密码,再点击 program password,如果加密成功,提示program is arrayed,如果0x400x43h中写入的是ffff,认为处于调试状态,flash不会加密; 4)断电后,下次重新烧写时需要往word0word3输入已设的密码,再unlock,成功后可以重新烧写了; 6、vcpp管脚接在5v上,是应直接接的,中间不要加电阻。 7、具体事宜请阅读相应目录下的readme和帮助文件。 8、cmd文件的编写时应该避开40-43h单元,好多客户由于没有注意到这里而把falsh加密。,第三部分: tms320f281x flash api应用指南,flash api,本部分主要介绍如何在自己的程序中嵌入flash编程 通过ti提供的flash api(应用程序接口)可以定义和进行更复杂、自由的flash操作 flash api可以使用在ccs插件和sdflash中 flash api是进行更自由的flash 操作/编程的解决方案 flash api嵌入方式灵活易用 本部分以f2812为例进行讲解其他芯片请参照相应手册进行,flash api 实现方法,方式a:调试时用和仿真一致程序在ram中算法直接在ram中 方式b:代码通过通讯口引导来实现在ram中运行不推荐使用 方式c:程序在flash中需要通过程序拷贝到ram中运行,此方式不方便调试应用于最终产品,flash api 库,flash api library 包含了ti提供支持的flash编程算法并且提供了良好的接口和易于使用的定义,使开发更方便快捷,f28x flash api 函数调用,擦写指定段: uint16 flash2812_erase(sectormask, &fstatus) sectormask: 要擦写哪个段 &fstatus: 指向flash状态结构的指针 编程代码和数据到 flash/otp: uint16 flash2812_program(&flashaddr, &buffaddr, length, &fstatus) &flashaddr: 指向要编程的 flash/otp 首地址的指针 &buffaddr: 指向要编程的 flash/otp 缓冲器的指针 length: 要编程的 16位的字的数目 &fstatus: 指向flash状态结构的指针,f28x flash api 函数调用2,效验正确的算法频率配置: uint16 flash2812_toggletest (&muxreg, togglereg, mask) &muxreg: 指向一个 gp i/o mux 寄存器的指针 &togglereg: 指向一个 gp i/o 触发寄存器的指针 mask: 指示哪个管脚被触发 flash/otp的效验值: uint16 flash2812_verify(&flashaddr, &buffaddr, length, &fstatus) &flashaddr: 指向 flash/otp的第一个地址 &buffaddr: 指向反向比较缓冲器的指针 length: 比较的16位字的数目 &fstatus: 指向flash状态结构的指针,flash api 状态结构,flash api 的运作,为了增加植入的flash编程,必须进行如下几步操作: 1. 增加 flash api 库到工程。 2. 添加 flash api 头文件到源代码中。 3. 根据cpu频率初始化pllcr 和配置flash 算法 4. 进行触发测试(如果测试未通过不要擦写或编程,可能导致flash毁坏。此测试无法自动停止故仅限于开发阶段使用。测试的结果为10khz左右。对于首次设置测试是必须的) 5. 单周期 saram执行flash api 源代码 6. 另

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论