TMS2812的内flash启动过程
- 格式:pdf
- 大小:432.11 KB
- 文档页数:4
第一步:安装CCS3.1或更高版本下面以3.3为例第二步:安装串口编程算法项目文件插件:sdf28xx_v3_3_serial(不同CCS对应不同版本插件,此插件与CCS3.3对应),安装在CCS根目录下第三步:安装SdFlashV1.60或更高版本,安装在CCS根目录下第四步:编辑sdopts.cfg文件,此文件存放在你所安装的windows的System32目录下(1)用记事本的方式打开sdopts.cfg(2)在"# End of sdopts.cfg”前加入如下文本:[EmulatorId=C1]EmuPortAddr=0xC1EmuPortMode=RS232EmuProductName=SERIAL_FLASH[EmulatorId=C2]EmuPortAddr=0xC2EmuPortMode=RS232EmuProductName=SERIAL_FLASH[EmulatorId=C3]EmuPortAddr=0xC3EmuPortMode=RS232EmuProductName=SERIAL_FLASH[EmulatorId=C4]EmuPortAddr=0xC4EmuPortMode=RS232EmuProductName=SERIAL_FLASH第五步:打开SDFlash,路径为…\CCStudio_v3.3\specdig\sdflash\bin下(在打开CCS的前提下,还需打开要加载的工程,SDFlash.exe才能打开)第六步:打开F2812SerialFlash.sdp工程路径为…\CCStudio_v3.3\sdflash\myprojects\sdf28xx_v3_3_serial\f2812打开Project-setting菜单,分别对target、erase、Programming、Verify进行设置Target:…\CCStudio_v3.3\sdflash\myprojects\sdf28xx_v3_3_serial\f2812\F281xRS232Flash.dll 若使用PC的COM1则选择仿真器为C1,COM2则选择C2Erase:…\CCStudio_v3.3\sdflash\myprojects\sdf28xx_v3_3_serial\f2812\F2812SerialFlash.out Programming:(1)…\CCStudio_v3.3\sdflash\myprojects\sdf28xx_v3_3_serial\f2812\F2812SerialFlash.out (2)flash data 载入要烧写的文件工程最好放在…\CCStudio_v3.3\MyProjects下,避免不必要的麻烦Verify:…\CCStudio_v3.3\sdflash\myprojects\sdf28xx_v3_3_serial\f2812\F2812SerialFlash.out 其余不用改动,按默认值就可以。
1.先安装sdf28xx_v3_3_serial,安装时按照默认路径安装,与CCS3.3安装路径相同;2.安装SDFlash 软件:SetupCCSPlatinum_v30329,安装路径与CCS3.3安装路径相同;3. 编辑sdopts.cfg文件,此文件存放在你所安装的windows的System32目录下(1)用记事本的方式打开sdopts.cfg(2)在"# End of sdopts.cfg”前加入如下文本:[EmulatorId=C1]EmuPortAddr=0xC1EmuPortMode=RS232EmuProductName=SERIAL_FLASH[EmulatorId=C2]EmuPortAddr=0xC2EmuPortMode=RS232EmuProductName=SERIAL_FLASH[EmulatorId=C3]EmuPortAddr=0xC3EmuPortMode=RS232EmuProductName=SERIAL_FLASH[EmulatorId=C4]EmuPortAddr=0xC4EmuPortMode=RS232EmuProductName=SERIAL_FLASH3.利用串口线连接DSP与PC机;配置F2812为从SCI-A的启动模式,复位时:GPIOF4=0 GPIOF12=0 GPIOF3=1 GPIOF2=1;4.打开SDFlash,路径为:C:\CCStudio_v3.3\specdig\sdflash\bin下SDFlash.exe,如下图所示。
5.打开F2812SerialFlash.sdp工程,路径:C:\CCStudio_v3.3\specdig\sdflash\myprojects\sdf28xx_v3_3_serial\f28126.打开Project-Settings菜单,对工程进行配置,_ Driver: This must point to F281xRS232Flash.dll (for F281x devices), toF280xRS232Flash.dll (for F280x, F2801x, and F2804x), or toF2833xRS232Flash.dll (for F2833x and F2823x devices)._ Emulator Address/ID: This is the COM port on your PC that you are using to connect to the DSP. If COM1, COM2, COM3 and COM4 do not appear as options, modify the sdopts.cfg file as described previously in step 4._ Board file: Leave as ccBrd028x.dat_ Processor name: Leave as cpu_0Algorithm File: Use the same algorithm file that you specified on the Erase Tab. _ Flash Data File: This is the .out file that you want to program into the flash._ Timeout: Leave as 0. This option has been superseded by Programming User Options 4._ User Options 1 through 3: Unused._ User Options 4: : Program acknowledge retry specifier. After sending the DSP a packet of data to program into the flash, the PC runs a loop that checks for aprogram acknowledge from the DSP. This option controls the maximum number of times the PC will loop. It can generally be left at the default value of 0.Algorithm File: Use the same algorithm file that you specified on the Erase Tab. _ Timeout: Leave as 0._ User Options 1 and 2: Unused.Note: In the JTAG version of SDFlash, these options specify the wait-states for the OTP and Flash memory to be set before the verify operation starts. The serial version of SDFlash does not use these options however, and instead the wait-states remain set to their reset defaults (which are the maximum values). _ User Options 3 and 4: Unused8.保存SDFlash工程,9.DSP上电或复位,以启动SCI-A模式10. 复位SDFlash,单击红色按钮。
TMS320F2812开发板使用说明V 0.1目录目录 (2)第1章系统概述 (3)1.1 功能及资源 (3)1.1.1系统功能 (3)1.1.2硬件资源 (3)1.1.3软件资源 (3)1.1.4TMS320F2812的特性 (4)第2章连接端子及操作说明 (5)2.1 外部总线扩展端口 (6)2.2 GPIO接口 (6)2.3 ADC模拟接口 (7)2.4 B OOT跳线说明 (7)2.5 操作说明 (8)2.5.1程序下载、仿真、调试 (8)2.5.2注意事项 (8)第3章附录 (9)3.1 板载资源分配表 (9)3.2 电气参数表 (9)3.3 机械尺寸图 (10)3.3.1TMS320F2812 EVM板 (10)第1章 系统概述变频驱动技术的应用越来越广泛,如在空调、冰箱、洗衣机等家电中都有应用。
现在变频驱动主要使用PWM合成驱动方式,这要求其控制器有很强的PWM生成能力。
TMS320F2812是TI公司新推出的高性能控制DSP,具有两个变频专用的PWM发生模块和150MIPS运算处理能力,适用于小体积、嵌入式的变频系统。
TMS320F2812 EVM 开发板包括以下配件:TMS320F2812 EVM电路板一块光盘一张— 包括例子代码— 电路原理图— CCS 3.3集成开发环境— TMS320F2812原理与开发(电子版)一条RS-232通信电缆一个交流电源适配器1.1 功能及资源1.1.1 系统功能EVM板提供TMS320F2812开发所需的必要硬件。
拥有总数达640K Words的Flash和274K Words SRAM。
用户可以在上面完成和种控制算法或其它应用的软件开发工作。
1.1.2 硬件资源TI公司的高性能32位DSP TMS320F2812512K Words 片外Flash (一片SST39VF800 70ns)可扩展至512K Words 的外部SRAM (100MHz)板载默认256K Words(IS61LV25616 – 100MHz) 一个CAN通信接口一个RS-232通信接口JTAG调试接口16路AD测量通道外部总线接口GPIO扩展接口1.1.3 软件资源各种板载硬件的测试代码TI原厂的硬件例子代码和功能函数库CCS 3.3集成开发环境通用USB2.0仿真器驱动程序公版的串口调试程序1.1.4 TMS320F2812的特性高性能的32位内核— TI 32位C28x处理器— 16X16双MAC或32X32单MAC操作— 片内基于锁相环的时钟发生模块— 最高运行速度:150MHz @ 1.9V芯片内存储器— 128K Words 片内Flash— 1K Words 片内OTP ROM— 4K Words 片内 Boot ROM— 18K Words 片内SRAM工作温度: -40 ℃~85 ℃12位的ADC模块— 可编程的转换速率,最大转换速率12.5Msps— 16个外部输入通道— 可与PWM发生器等等定时器联动,实现电机控制中的电参量测量串行通讯接口— 通用异步串行通讯接口(UART)— 标准外围接口(SPI)— 多路缓冲串行接口(McBSP)— eCAN通信接口(CAN) 事件捕获模块— 两个事件捕获模块EVA和EVB— 包含两个定时器— 3个捕获输入— 3个比较匹配输出,可产生三路PWM输出— 一个增量编码器接口,拥有四倍频电路— 普通定时器功能电机控制模块— 两个PWM发生模块— 能够产生三相六路可编程的PWM波形(中心对称或边沿方式),如三相的SPWM、SVPWM等 — 提供PWM占空比值同步载入逻辑— 自带五段SVPWM合成逻辑— 可编程的硬件死区插入功能,死区时间可设定— 可编程的错误和过载保护逻辑— 普通定时器功能三个32位通用定时器— 通用32位定时器内嵌JTAG仿真功能,可实现的在线仿真、调试外部可编程16位扩展总线接口最多56个通用输入输出管脚第2章 连接端子及操作说明评估板的连接端子和测试点分布如图2-1所示:图2-1 连接端子与测试点分布图2.1 外部总线扩展端口2.2 GPIO接口2.3 ADC模拟接口2.4 Boot跳线说明为了方便系统调试和开发,评估板预留了6个Boot选择跳线。
TMS320F2812开发板软件调试说明书2812开发学习板的测试程序包括下面几个方面:测试存储系统,包括SRAM和外扩FLASH测试BOOT过程测试所有F2812的外设测试LCD接口测试网络接口测试音频输入输出测试以太网接收和发送注意:测试程序的调式工具是以本公司的USB仿真器下,为了方便起见,建议用户用本公司USB仿真器,如果使用其它类型的仿真器,请参考有关资料真确安装驱动。
第一章 如何开始DSP编程第一步:安装CCS,可参考其他书籍,主要提醒一点,如果不使用仿真器,CCS的运行环境要设置成一个模拟仿真器。
第二步:运行CCS,则进入CCS开发环境,如下图所示新建一个工程,如下图第四步:选择路径,输入工程项目名,并确定,则如下图所示添加源文件,添加CMD文件,添加库文件,如下图所示:添加CMD文件和库文件跟添加源文件的方法相似,在这里不在赘述。
添加完成后整个工程如下所示:第六步:设置BUILDING OPTIONS主要是Linker选项:Output Module: absolute executableAutoinit Mode: run-time AutoinitializeStack Size: 200h (可以设置,也可以不设置,可在CMD中包含)Code Entry Point: main这是默认设置。
第七步:编译,生成 *.out文件,如图下图所示:如果程序有错误,必须修改正确。
直到编译没错误。
第八步:LOAD程序,如下图所示(注意:*.out文件在工程目录中的DEBUG文件夹中)第九步:单步运行程序,把光标摆在 main()函数中第一条语句,按“执行到光标处”图标,如下图所示:第十步:单步跟踪或全速运行,观看结果,具体操作根据具体情况,在此不在赘述。
第二章 2812开发学习套件演示程序测试注意:所有演示程序必须拷到硬盘,并且去掉其“只读属性”。
1.TIMER0测试F2812上有3个32位的CPU定时器,本程序主要对CPU定时器0进行操作,100MS产生1次中断,在中断中让 2812开发板上的L1—L8发光二极管闪烁,实现跑马灯的效果。
1. 一定要下载最新的FLASH烧写插件,可以避免很多奇怪的错误出现,这一点非常重要,本人就是在此问题困扰了一整天。
名称是:C2000-2[1][1].00-SA-to-UA-TI-FLASH2X.EXE我使用的产品版本号为2.02.0012. 下载烧写FLASH配套CMD文件、LIB文件以及起始代码asm文件。
CMD文件名称:DSP281x_Headers_nonBIOS.cmdCMD文件名称:F2812.cmdLIB文件名称:rts2800_ml.libASM文件名称:DSP281x_CodeStartBranch.asm另外在RAM调试时用以下两个文件:F2812_EzDSP_RAM_lnk.cmdDSP281x_Headers_nonBIOS.cmd附件给出了2个CMD文件、ASM文件、LIB文件以及C文件。
其中C文件仅仅作为大家参考。
3. 配置C文件配置好主程序的C文件,才能将FLASH成功烧录,并且将FLASH中的文件拷贝到RAM中运行。
关于C文件的配置。
首先在F2812.CMD文件中,我们可以看到有关于加载FLASH到RAM的内容:ramfuncs : LOAD = FLASHD,RUN = RAML0,LOAD_START(_RamfuncsLoadStart),LOAD_END(_RamfuncsLoadEnd),RUN_START(_RamfuncsRunStart),PAGE = 0以及在C文件中调用FLASH 到RAM的函数memcpy,将它放在系统初始化(InitSystem();)之后即可:InitSystem();memcpy(&RamfuncsRunStart,&RamfuncsLoadStart,&RamfuncsLoadEnd - &RamfuncsLoadStart);Initflash();所以,我们需要定义所用变量:extern Uint16 RamfuncsLoadStart;extern Uint16 RamfuncsLoadEnd;extern Uint16 RamfuncsRunStart;我的这些定义都是:DSP281x_GlobalPrototypes.h 当中,当然,也可以放在其他系统初始化的地方。
2812的FLASH烧写
TMS320F2812 FLASH烧写
1.1. 烧写软件的安装
打开“工具\CCS3.1烧写插件”目录下的文件:“C2000FlashPlugin1.13.0.exe”,并按照提示安装软件。
软件安装完成后,打开CCS 3.1,会出现下图红圈中的云状按钮。
1.2. 生成烧写文件
以键盘实验为例说明。
打开keyboard文件夹下面的.PJT工程文件。
从工程中移除文件:SRAM.cmd 。
如下图所示。
之后,添加FLASH.cmd 文件到工程。
如下图所示
在工具栏单击Release按钮,并重新编译。
Release 目录下的OUT 文件是最终烧写文件。
1.3. 烧写用户程序
点击云状物按钮,出现下图所示界面。
注意红框部分最好不要修改,也不要轻易点击“Lock”,否则2812 可能烧毁。
编程程序设定:
点击Execute Operation按钮即可开始烧写,此过程会出现多次进度条提示,分别是:clear、erase 、program 、check 等。
请耐心等待,程序会自动完成烧写过程。
烧写完成后关闭烧写界面。
如果信息栏出现如下图所示信息,说明烧写成功!
请将开发板断点后重新加电,即可。
2812的内部Flash启动过程
2812的内部flash启动过程
2812从内部flash启动的详细流程说明:
a)程序硬件复位或者软件复位
b)判断mp/mc是否为0
c)为0则从boot rom启动,否则从外部启动
d)到boot rom的0x3F FFC0处取出复位向量,跳到boot函数
e)采集IO管脚状态,
f)根据IO状态选择boot方式
g)如果是flash,程序退出boot函数,跳转到0x3F 7FF6
h)取出跳转指令,跳转到自己的指定地址或者C初始化的入口_C_INT00处
i)在C初始化的入口_C_INT00对一些变量,堆栈和寄存器进行必要的设置,
该函数在c的库函数内
j)进入main函数
从上电到我们的主函数运行之间这段时间里2812到底做了些什么?2812是怎样引导程序运行的?下面叙述其启动过程。
在2812中引脚XMP/~MC,当该引脚的为高电平时表示是微处理器模式(microprocessor),为低电平时表示微机算计模式(microcomputer),当为微处理器模式时,2812内部的bootrom被禁止,通过zone7(0x3F C000)从外部调引导程序启动。
2812复位以后,其复位向量是固定的0x3FFFC0,如果为微处理器模式,那么复位后的复位向量指向的外部的地址,即0x3FFFC0是zone7处的地址,若为微机算计模式,那么0x3FFFC0指向的是2812的片内FLASH的地址。
下面就以微机算计模式加以说明其过程。
上电复位后,复位向量是指向片内Flash的0x3F FFC0,2812有一块flash地址从0x3F F000-0x3F FFFF在出厂时已经固化好了引导程序。
在0x3F FFC0处是一条跳转指令,跳到iniboot(地址0x3F FC00)函数处执行iniboot代码,该iniboot代码就是TI在dsp出
厂时固化在flash中的。
InitBoot assembly Routine将选择SelectBootMode function启动模式函数。
这个函数由GPIO 引脚的状态决定启动类型。
引导模式选择
GPIOF4 GPIOF12 GPIOF3 GPIOF2
(SCITXD
A)
(MDXA) (SPISTEA) (SPICLK)
PU No PU No PU No PU Mode Selected
1 X X X
跳转到地址为0x3F7FF6的Flash,用户必须在这里编写分支语句优先于复位,以按需要重新
定位代码的执行.
0 1 X X 调用SPI_Boot 以从外部的EEPROM载入
0 0 1 1 调用SCI_Boot 以从SCI-A载入
0 0 1 0 J跳转到 H0 SARAM 0x3F 8000
0 0 0 1 跳转到OTP地址 0x3D 7800
0 0 0 0 调用Parallel_Boot从GPIO 端口B载入
一旦启动结束,选择启动模式函数返回一入口地址给InitBoot函数。
入口地址是退出bootloader之后代码开始执行的起始点。
InitBoot接着将会调用ExitBoot子程序,把CPU寄存器的状态恢复到复位状态。
比如flash boot模式,那么initboot执行完后跳转到
0x3F 7FF6处(codestart处),此位置刚好在128位(CSM)密码位置之前,你要在0x3F 7FF6处放置跳转指令,以跳转到你要去的地方,比如是boot loader或应用代码,通常的跳转去处是_c_int00。
在0x3F 7FF6 处放置跳转指令的方法如下
(DSP281x_CodeStartBranch.asm中):
.sect "codestart"
code_start:
.if WD_DISABLE == 1
LB wd_disable ;Branch to watchdog disable code
.else
LB _c_int00 ;Branch to start of boot.asm in RTS library
.endif
.if WD_DISABLE == 1
.text
wd_disable:
SETC OBJMODE
EALLOW
MOVZ DP, #7029h>>6
MOV @7029h, #0068h
EDIS
LB _c_int00
.endif
.end
MEMERY
{
Page 0:
………..
RAML0 : origin = 0x008000, length = 0x001000 /* on-chip RAM block L0 */ OTP : origin = 0x3D7800, length = 0x000400 /* on-chip OTP */
FLASHD : origin = 0x3F0000, length = 0x002000 /* on-chip FLASH */
FLASHC : origin = 0x3F2000, length = 0x002000 /* on-chip FLASH */
FLASHA : origin = 0x3F6000, length = 0x001F80 /* on-chip FLASH */
CSM_RSVD : origin = 0x3F7F80, length = 0x000076
BEGIN : origin = 0x3F7FF6, length = 0x000002
………..
}
SECTIONS
{ ……….
/* Allocate program areas: */
.cinit : > FLASHA PAGE = 0
.pinit : > FLASHA, PAGE = 0
.text : > FLASHC PAGE = 0
codestart: > BEGIN PAGE = 0
ramfuncs : LOAD = FLASHD,
RUN = RAML0,
LOAD_START(_RamfuncsLoadStart),
LOAD_END(_RamfuncsLoadEnd),
RUN_START(_RamfuncsRunStart),
PAGE = 0
csmpasswds : > CSM_PWL PAGE = 0
csm_rsvd : > CSM_RSVD PAGE = 0
/* Allocate uninitalized data sections: */
.stack : > RAMM0 PAGE = 1
.ebss : > RAML1 PAGE = 1
.esysmem : > RAML1 PAGE = 1
/* For SDFlash to program these, they must be allocated to page 0 */
.econst : > FLASHA PAGE = 0
.switch : > FLASHA PAGE = 0
……….
}
上面代码执行后跳到C初始化的入口_c_int00(0x3F6000) ,在C初始化的入口,_c_int00对一些变量,堆栈和寄存器进行必要的设置,这个函数在运行支持库(rts.lib)中,_c_int00函数为建立C运行环境,需完成以下工作:
a.为系统堆栈产生.stack块,并初始化堆栈指针;
b.从.cinit块将初始化数据拷贝到.bss块中相应的变量;
c.对寄存器进行必要的配置,调用main函数开始运行C程序;
没有过多的资料介绍_c_int00这块,无法知道它的具体功能实现以及怎样跳转到主函数的,用户可以对c_int00函数进行修改,但修改后的函数必须完成以上任务。