以下DSP上电自举调试经验的前提: 采用的是MP/MC=0的模式,采用ROM中固化的bootloader,flash映射在数据空间,曾经烧写过两类flash:Am29DL400B和SST39LF/VF200A/400A/800A。 1、烧写flash: 关于flash的烧写程序,很容易出错的是两点:无法正常擦写,不知道是否正确写入。 烧写flash要严格按照flash芯片的命令顺序:以Am29DL400B的写单元为例:555(地址) AA(发数据)——2AA 55—— 555 A0——PA PD 其实555 AA都是命令,并不是真的在flash芯片的555地址写入数据AA,只是flash的命令,只有到PA PD时候,才是真在PA的地址写数据PD。而且对于这款flash,命令的最高位是忽略的。 如果flash无法擦除和写入,可以考虑:降低DSP工作频率,使得读写时序满足flash的 datasheet的要求;检查是否按照datasheet的发命令顺序,一般是先reset再Chip Erase再Program;再就是用示波器测试一下,看看写信号和片选信号和数据是否都到达Flash芯片,测试时,可以用一个循环一直写flash,如果这些都正常,就是你的写时序出问题了。 看看写时序是否满足Flash的写周期时间要求,等待周期是多少,写周期后的等待时间是多少,也要看读写该芯片应该插入多少等待(SWWSR寄存器)。实在不成的话,写Flash时把时钟降下来。 不知道是否正确写入flash,可以直接用仿真器,上电后先不打开project,添加GEL文件后就可以在ccs中看到data空间的数据了。如果是乱七八糟的数据,有可能是GEL文件中寄存器的设置不对,但是建议不要修改GEL文件中寄存器的默认值。此时可以打开烧写flash的project,运行到reset flash命令后就可以看到 data空间的数据了。 2、上电自举: 程序正确烧写进flash后一般上电是能够正常自举的,如果有问题的话首先应该查询写入的自举表是否正确。10AA ,SWWSR(推荐值7FFFH), BSCR(推荐值F800H)这三个标志写对了的话就继续检查程序入口XPC,程序入口地址,程序块长度、存放目标XPC、存放目标地址,这5个值任何一个有问题都无法正常自举。还有就是数据空间FFFFH地址的8000(自举表存放首地址)是否正确写入。 建议烧写一个小的程序,比如说让XF脚产生方波的程序,在XF脚上加一个LED灯闪烁则表示自举成功。 PS:调试DSP的bootloader聪烧写flash到上电自举,确实会发生不少问题,需要仔细检查,最好阅读TI的开发手册中相关文档:比如TMS320VC5416 Bootloader (Rev. D).pdf
|