Dm6437启动调试说明
DM6437启动调试说明
1 参考文档
《SPRAAG0D--Using the TMS320DM643x Bootloader.pdf》
2 所需软件
《CCS3.3》
《ActivePerl-5.8.8.820-MSWin32-x86-274739.msi》:由于烧写需要用到perl脚本,必须安装此插件;
《CCS_v3.3_SR11_81.6.2.exe》
3 名词解释及缩写
4 简介
ROM启动模式下,设备从ROM的0x00100000地址开始启动。RBL的启动模式的先后顺序如下:
●Emulation boot
●HPI
●PCI (DSP as slave)
●EMIFA ROM direct boot
●EMIFA ROM fast boot with AIS
●EMIFA ROM fast boot without AIS
●NAND
●I2C (DSP as master)
●SPI 16 ×8 (DSP as master, 16 bits of address per SPI operation, supporting upto 64Kx8
devices)
●SPI 24 × 8 (DSP as master, 24 bits of address transmitted per SPI operation supporting upto
16Mx8 devices)
●UART (DSP as slave), no flow control
●UART (DSP as slave), with flow control
●VLYNQ (DSP as slave)
在启动时读取BOOTCFG寄存器来决定启动模式。
如果使用从器件方式启动,启动模式错误或者启动中发生任何错误,将自动切换到UART 启动模式下。
如果使用主机模式启动,当需要时bootloader读取从设备的信息来启动。当从模式启东市,bootloader依赖主设备来获取所需的启动信息。注意:所有启动模式下,启动阶段RBL必须关闭看门狗,此时所有程序必须避免配置看门狗的寄存器(不允许AIS命令或者代码改变这些寄存器)。
5 系统存储器分配
DDR2内存空间为64MByte
6 启动模式介绍
1. boot sequence & boot modes
boot过程中,程序和数据段从设备内存中load出来,同时某些设备的内部寄存器由预先设定的值进行编程。每一个设备级的全局reset后boot就被自动启动。有几种内存和寄存器初始化的方法,此即是boot模式。DM6437的boot模式分为三类—Non-Fastboot Modes, Fixed-Multiplier Fastboot Modes, and User-Select Multiplier Fastboot Modes. 具体模式由BOOTCFG寄存器的以下几个位域决定:
> BOOTMODE[3:0]
> PCIEN ---->这两个联合决定boot类型,如I2C BOOT, EMIFA BOOT, HPI BOOT, PCI BOOT >FASTBOOT---->决定是否使能PLL以加速boot进程
> AEM[2:0]
> PLLMS[2:0] ---->这两个联合,在FASTBOOT=1时决定PLL倍频器
有一点要注意:除了EMIFA ROM Direct Boot模式的DSPBOOTADDR=0x42000000外,其他boot模式下缺省的DSPBOOTADDR=0x00100000.且bootloader程序会去使能所有c64x+的cache,包括L2,L1P,L1D,故在bootloader后,c64x+的所有内存都被配置成RAM,如果需要,则需自己手动配置cache.
由上述三类boot模式,在设备reset后,boot控制器缺省下有两个启动地址DSPBOOTADDR,由boot模式而定,在任何一种boot模式下,c64x+立即从reset状态下释放,并开始从DSPBOOTADDR所给的地址处开始执行。【读取一下DSPBOOTADDR寄存器(0x01C4 0008),看看其中的值】
Internal Bootloader ROM (0x0010 0000): 对大多数boot模式,DSPBOOTADDR缺省下均是内部bootloader ROM地址,使得DSP可以在内部ROM中迅速执行bootloader代码。bootloader code解码从BOOTCFG寄存器中获取到的BOOTMODE,FASTBOOT,PCIEN,default AEM(DAEM)以及PLLMS信息以决定随后恰当的boot操作。【读取下BOOTCFG Register(0x01C4 0014)的值,分析当前采用的是哪种boot模式】
EMIFA Chip Select Space 2 (0x4200 0000): EMIFA ROM Direct Boot是唯一的例外,此时DSPBOOTADDR的地址指向EMIFA Chip Select Space 2,DSP从外部ROM的EMIFA空间开始执行。
注意,某些boot 模式必须配置成FASTBOOT=1,以使对应的外设可以以合理的速率运行,完成外部设备间的通信,比如PCI BOOT。
2. configuration at/after reset
MSTPRI0 Register—0x01C4 003C: 配置C64X+_CFGP master port priority in System Infrastructure.
MSTPRI1 Register—0x01C4 0040: 配置PCIP,HPIP,VLYNQP,EMACP等外设的优先级HPICTL Register —0x01C4 0030: HPI控制寄存器,修改时需确保HPI FIFO为空且无on-going HPI交互
TIMERCTL Register—0x01C4 0084:对Timer0/Timer2提供额外的控制
EDMATCCFG Register—0x01C4 0088:配置EDMA TC0~TC2三个通道的缺省burist尺寸(DBS). 注意每个传输通道有自己不同的FIFI size,并服务的侧重点不同,如TC2DBS缺省为64byte,FIFO为128bytes,主要服务于PCI或一些杂七杂八的传输;TC1则主要用于高吞吐量的大批量传输,TC0主要用于有严格的时间限制的短burst传输,如McBSP, McASP的传输。
以上寄存器均只能在设备初始化时修改一次,且对应设备需为未使用状态。
3. multiplexed pin configurations
DM6437充分利用多重引脚的寄存器来满足大量外设功能配置的需要,提供极为灵活的终端应用。PINMUX0和PINMUX1两个引脚复合寄存器负责控制所有多重引脚功能,这两个寄存器的某些位域的缺省设置在reset时已经配置好了,但在after reset,可以通过对这两个寄存器进行软件编程来切换某些引脚功能.DM6437的以下设备拥有多重功能引脚:VPSS (VPFE/VPBE), EMIFA, PCI, HPI, VLYNQ, EMAC,McASP0, McBSP0, McBSP1, PWM0, PWM1, PWM2, Timer0, Timer1, UART0, UART1, HECC, and GPIO.
PINMUX0 Register— 0x01C4 0000
PINMUX1 Register—0x01C4 0004 (具体位域描述及如何对其编程以选择需要的外设功能110)
4. VPSS_CLKCTL Register—0x01C4 0044: 通过这个寄存器控制VPSS的时钟
启动模式的选择依赖于启动设备的引脚状态。这些引脚的状态在设备POR复位的上跳沿写入BOOTCFG寄存器中。在指定模式下,Bootloader读取BOOTCFG寄存器的内容同事跳转到相关的代码去运行。
启动模式分为三类:
Non-Fastboot Modes
Fixed-Multiplier FastbootModes
User-Select Multiplier Fastboot Modes
●Non-Fastboot Modes
Non-Fastboot Modes (FASTBOOT = 0): 设备在默认的PLL旁路模式下运行。.
●Fixed-Multiplier FastbootModes
Fixed-Multiplier Fastboot Modes (FASTBOOT = 1, AEM[2:0] = 001b): 启动代码通过固定的PLL配置来加快设备的速度.
User-Select Multiplier Fastboot Modes
User-Select Multiplier Fastboot Modes (FASTBOOT = 1, AEM[2:0] = 000b,011b,100b,101b): 启动代码在启动阶段调整设备速度。PLL通过PLLMS[2:0]引脚来设置PLL的值来决定系统的运行速度。
注意:如果设置了错误的启动模式,bootloader将会写一个错误信息到BOOTCMPLT 寄存器的ERR位,然后使用默认的UART启动模式(针对所有Non-Fastboot Modes,如:I2C,SPI)。
设备启动引脚必须设置为正确的模式之一。
6 .1NAND Flash Boot (BOOTMODE[3:0] = 0111b, FASTBOOT = 0 or 1)
在Rev1.30版本的设备上NAND Flash的启动已经完全支持了。对于Rev1.0和Rev1.20这种模式仅通过二次bootloader实现。
对于Rev1.30版本的设备,bootloader支持使用AIS镜像的启动方式,AIS镜像文件存储在NAND Flash中的Block 1或以上的部分。Bootloader将会在block的page0的32bits中搜索AIS镜像文件号。如果magic number没有找到,则会搜索所有NAND的block块知道最后一个块。如果magic number没有找到,则会退出启动。启动代码将会跳过坏块。坏块会在启动的时候被检测到一个典型值0xBADDBADD在每个NAND块的空闲空间偏移量为0x4的地方。当坏块被检测到后bootloader将会跳过这个块进入下一个块。当检测到读取数
据块的错误时,bootloader将会在ECC中写入1bit的ECC修正。Bootloader通过DMP的EMIF模块提供的硬件的ECC估计来检测ECC错误。
在Rev1.0和Rev1.20中有所不同。二次bootloader的数据格式在NAND中必须为AIS 格式。AIS格式可以看作是一个串行数据流。这里暂时不考虑。P16
6 .2启动方式的设置
AEM[2..1]=001, AEAW2=1
BM[3..0]=0111, FASTBOOT=1
BOM版本1.3以上
Tms320dm6437 P89
BOOTCFG:0x01c40014
设备启动模式和配置引脚在动启动阶段捕获BOOTCFG寄存器。这是一个只读寄存器。
BOOTCMPLT:0x01C4000C
启动完成寄存器,记录启动的错误状态。
DSPBOOTADDR:0x01C40008
DSP启动地址寄存器,包含C64X+启动地址。
The DSPBOOTADDR defaults to 0x0010 0000 when the Internal Bootloader ROM is used.
or
The DSPBOOTADDR defaults to 0x4200 0000 when EMIFA CS2 Space is used.
PLL1
PLLM:0x01C40910
6 .3设置NAND启动的步骤如下
设置AEM;
设置启动模式;
测试DSP版本号:
确保ROM的版本是PG1.3版的设备,因为PG1.2版的设备不支持此功能;
Set JP2 jumper to NAND on the EVM, set the SW2 switches to 0011 (AEM[2..1]=001, AEAW2=1) and the SW1 switches to 11101XXX (BM[3..0]=0111, FASTBOOT=1)
6 .4NAND启动的AIS镜像
NAND的AIS启动镜像和其他的启动方式很相似,除了3个关键词不同:AIS镜像中的起始Block和页数知道数据实际被写入到NAND设备中,你需要在AIS数据中填充此三个部分的值。DM643x工具预留了空间,当烧写最终镜像到NAND的时候,让用于填充实际的数值。
7 AIS说明
Bootloader从脚本接收启动信息,此文件称为AIS。AIS是TI的一种脚本格式,其包含一个二进制文件,这个二进制文件包含在一系列的命令之后,在bootloader执行完这些命令之后。每个命令包含一个执行的代码和执行参数。AIS版本目前是1.99,所有的命令在32位带宽下执行。
AIS启动头从0x41504954开始执行;跟随这个头的后面是一些的命令。每个命令包含一些可选的参数。所有命令在一个JUMP_CLOSE命令处终止。这个命令触发加载部分的应用代码(在ROM中执行)。
Bootloader只接收AIS格式的数据,除了HPI和PCI启动方式。下面是每种命令的对应号码。AIS Ver2.0支持的代码如下所示:
7 .1Set命令
7 .2Get命令
7 .3函数执行命令
7 .3.1PLL配置函数
在FASTBOOT选项被选中之前,PLL配置函数使能PLL。PLL配置函数需要以下参数:
1)PLL倍频;
2)PLL分频;(divide down for CPU/system clock)
3)晶振来源;(0-internal , 1 - external)
PLL1设置
0x01C40800
PLL:0x01C40910 0x15
PLL DIV:0x01C40918 0x8000(Divider 1 enble, divider ratio 0)
OSD source:0x01C40900[8] 0x49->Internal oscillator.
TMS320DM643x DMP (DDR2) Memory Controller User's Guide -spru986a.pdf
设置DDR2内存寄存器
0x01C40c00
PLL: 0x01C40d10 0x0x00000017
OSD source: 0x01C40d00[8] 0x49->Internal oscillator.
PLL DIV2 (VBPE CLK DIV): 0x01C40d1c 0x0000800B
PLL DIV1(DDR CLLK DIV): 0x01C40d18 0x00008001
DDR PHY Control Register(DDR Control register mask): 0x200000e4 0x50006405 DDR Bank:0x20000008 0x01174822
DDR Timing(SDRAM Timing Register):0x20000010 0x16492148
DDR Timing(SDRAM Timing Register2):0x20000014 0x000CC702
(SDRAM Refresh Control Register):0x2000000C 0x000004EF
NAND Boot AIS Boot Image Example
使用-cfg选项,可以使用一系列设置或者函数来执行命令,包含在AIS数据数据的开头处。这运行去配置DDR内存控制器,EMIF或者PLL去使能合适的boot(从外部存储器或者到外部存储器)。这些命令数据在文件中卫浴AIS其他数据之前。注意这些配置文件的数据在genAIS工具中不能解释;他只是直接输出到文件中。注意必须确保数据在文件的队列中正确的排序。一个简单的配置文件调用ROMed配置函数如下所示(PLL,EMIF,和DDR内存控制器)。
1)确定ROM版本
Bootloader版本可以通过读取0x101A00来确定。可能有不同版本的ROM在同一时间存在。ROM版本0x27B2A120仅仅支持EMIFA直接从ROM启动。当使用此版本的时候,不能使用其他启动模式。ROM版本0x00010200和0x0010300至此所有的启动模式,包括FASTBOOT。
2)先将*.out文件转换成*.bin文件,使用spraag0d文件中的genAIS.pl工具;
3)使用NANDWriter project工程将*.bin文件烧录到开发板中;
注意secondary bootloader的情况
8 制作bin文件
8 .1所需资料
《SPRAAG0D--Using the TMS320DM643x Bootloader.pdf》
《spraag0d--Using the TMS320DM643x Bootloader.zip》
genAIS是一个perl脚本转换工具。注意需要Active Perl V5.8.6,至少是perl v5.8.0以上的版本。
注意:有些版本的windows系统不支持perl系统的函数,但是genAIS工具必须使用这些函数调用OFD(0fd6x)。如果你的系统不支持这些函数,ofd6x必须在运行genAIS工具之前调用。生成的XML文件作为genAIS命令行的输入调用。
8 .2genAIS工具输入参数说明
1)*.out, *a64应用文件:链接文件,这个文件是必须的;
2)*.cfg配置文件:可选;
3)XML目标输出文件的显示:如果系统不支持perl,此命令可选;
配置转换文件*.bat,其内容如下所示:
genAIS.pl -otype bin -i smartcore_dr.out -o smartcore_dr.bin -bootmode nand -cfg smartcore_dr.cfg
pausepause
上述标红的部分含义如下:
smartcore_dr.out:需要转换的out文件及其相对路径;
smartcore_dr.bin:生成的bin文件名称;
smartcore_dr.cfg:所需的配置文件
双击*.bat文件,生成所需的bin文件。
9 烧写bin文件说明
9 .1配置CCS3.3
点击此图标
关闭此对话框,出现如下窗口:
点击Save
9 .2连接CCS3.3与DSP
1)断开主板(ATM守护神)电源;
2)将仿真器(Seed-XDS560Plus)与PC机的USB口相连;
3)将仿真器的JTAG与主板(ATM守护神)相连;
9 .3烧写程序
9 .3.1载入Gel文件
1)点击此图标打开CCS;
2)复位CPU
由于默认采用NAND Flash启动,所以一定要复位CPU,否则无法正确执行仿真的程序。首先连接DSP与仿真器
复位CPU
3)Load Gel文件“dr_dm6437_V0.10.gel”,并连接仿真器
注意:一定要在连接仿真器与DSP之前加载gel,否则gel文件无法执行。
重新断开cpu,然后重新连接
9 .3.2加载烧写程序
注意,如果没有加载Gel文件,可能会出现如下错误:
?
?烧写程序不正确;
Data mismatch! Verification failed.
Block = 1
Page = 0
i = 0
src[i] = 0
dest[i] = 0
NAND_VerifyPage() failed.
1)加载“NANDWriter.out”程序;
2)点击,运行此程序,出现如下对话框;
3)输入所需烧写的文件路径;
4)烧写成功显示
10 问题汇总
1.采用何种启动模式?
启动模式分为三类:
?Non-Fastboot Modes (FASTBOOT = 0):
?Fixed-Multiplier Fastboot Modes (FASTBOOT = 1, AEM[2:0] = 001b):
?User-Select Multiplier Fastboot Modes (FASTBOOT = 1, AEM[2:0] = 000b,011b,100b,101b): 2.烧写程序的流程是怎样的?
将内存加载到哪里,烧写哪部分内容?
3.如何进行程序转换?即转换工具如何使用。
附录
1 DM6437学习笔记
1 .1概述
C64x+。DaVinci Video--400 500 600MHz 只支持小端方式
L1 SRAM 112k (32K程序,80k数据)
L2 SRAM 128k
ROM- ---64k
一个8位EMIFA
一个16/32位DDR2
EDMA 64通道
Video Ports 1 input 1 output
串口:McASP IIC 1个HECC 1个McBSP 2个UART
接口:32位PCI,VLYNQ ,10/100EMAC,16位HPI
程序数据存储:Async SRAM,DDR2 SDRAM,NAND Flash
1 .2外设
Asynchronous External Memory Interface- -- -- -- -- -- -- -- - EMIF SPRU984
DDR2 Memory Controller- -- -- -- -- -- -- -- -- -- -- -- -- ---DDR2 SPRU986
DSP Megamodule—Internal Direct Memory Access Controller- -- - IDMA SPRU871
DSP Megamodule—Interrupt Controller- -- -- -- -- -- -- -- -- -INTC SPRU871
DSP Megamodule—Power-Down Controller- -- -- -- -- -- -- -- ---PDC SPRU871
DSP Subsystem—Phase-Locked Loop Controller- -- -- -- -- -- ---PLLC SPRU978
DSP Subsystem—Power and Sleep Controller- -- -- -- -- -- -- - PSC SPRU978
Enhanced Direct Memory Access Controller- -- -- -- -- -- -- ---EDMA SPRU987
Ethernet Media Access Controller/- -- -- -- -- -- -- -- -- -- -EMAC/MDIO SPRU941- Management Data Input/Output Module
General-Purpose Input/Output- -- -- -- -- -- -- -- -- -- -- ---GPIO SPRU988
High-End CAN Controller- -- -- -- -- -- -- -- -- -- -- -- -- - HECC SPRU981
Host Port Interface- -- -- -- -- -- -- -- -- -- -- -- -- -- ---HPI SPRU998
Inter-Integrated Circuit Module- -- -- -- -- -- -- -- -- -- ---I2C SPRU991
Multichannel Audio Serial Port- -- -- -- -- -- -- -- -- -- -- -McASP SPRU980
Multichannel Buffered Serial Port- -- -- -- -- -- -- -- -- -- -McBSP SPRU943
Peripheral Component Interconnect- -- -- -- -- -- -- -- -- -- -PCI SPRU985
Pulse-Width Modulator- -- -- -- -- -- -- -- -- -- -- -- -- -- -PWM SPRU995
Timer, 64-bit- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ---Timer SPRU989
Two-Level Internal Memory- -- -- -- -- -- -- -- -- -- -- -- ---Cache SPRU862
Universal Asynchronous Receiver/Transmitter- -- -- -- -- -- ---UART SPRU997
VLYNQ Port- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ---VLYNQ SPRU938
Video Processing Back End- -- -- -- -- -- -- -- -- -- -- -- ---VPBE SPRU952
Video Processing Front End- -- -- -- -- -- -- -- -- -- -- -- - VPFE SPRU977
1 .3Boot
The TMS320DM643x DMP 通过配置既可以从异步EMIFA/NOR直接启动,也可从内部Boot ROM 启动