新闻  |   论坛  |   博客  |   在线研讨会
《TMS320F281x Boot ROM Serial Flash Programming》(SPRAAQ2)——四
luge1983 | 2010-05-14 18:04:01    阅读:5682   发布文章




4. Flash烧写加速

本应用报告也致力于减少烧写时间,基于此,本报告的方法论考虑的是:
● 轮流利用2个4KW缓冲区,使应用代码的传送得以持续不断
● 消除AppCode.bin中的无关数据带来的开销
● 在烧写前检查Flash,如果没必要擦除,就跳过擦除步骤
● 所有未用存储区填入0xFFFF
● 通过CKFA代码设置PLL,最大化SCI-A波特率

在《TMS320F2810, TMS320F2811, TMS320F2812, TMS320C2810, TMS320C2811, TMS320C2812 Data Manual》(SPRS174)中,列有典型烧写时间:对16KW扇区是500ms,对8KW扇区是250ms。F2810有3个16KW和2个8KW扇区,因此,整个64KW Flash的典型烧写时间是2s。

增大波特率可以显著减少烧写时间。Table 3给出了Flash烧写时间,参考《TMS320F2810, TMS320F2811, TMS320F2812, TMS320C2810, TMS320C2811, TMS320C2812 Data Manual》(SPRS174)。
【Table 3】

4.1 PC到F281x目标板

根据超级终端的计时器,RS-232波特率设置为38400bps时,烧写64KW的应用代码耗时37秒。波特率提高到57600bps时,烧写时间减少到24秒。

4.2 ICT到F281x目标板

如果直接连接到F281x,波特率可以增加很多;SCI-A既能收也能发。RS-232的传送带宽是被限制的,显著延长了烧写时间。在本应用报告中,使用仿真ICT(EICT)硬件,烧写64KW的AppCode只用了1.4秒。

4.2.1 方法论

用PC将CKFA和AppCode二进制文件传送到EICT的RAM中。F2812 eZdsp代表EICT。CKFA二进制文件存储在eZdsp的内部RAM中。AppCode二进制文件存储在F2812 eZdsp中。F2812 eZdsp有64KW的外部RAM。

从PC到EICT的传输是通过RS-232和超级终端进行的,速率相对来说较慢。

【Figure 23】

从EICT到F281x目标板的传输较快,因为不使用RS-232收发器。2块板子上DSP的SCI引脚直接相连,就像在产线上一样。CKFA控制F281x目标板及其PLL设置。以上这些使得EICT与F281x目标板的传输波特率可达1.875Mbps。

【Figure 24】

4.2.2 Flash烧写加速

理解Flash烧写过程后,让我们看看利用本应用报告中提到的技术烧写Flash需要花多长时间。串行传送64KW或128KW应用代码时,烧写时间与波特率直接相关。

4.2.2.1 从EICT向F281x目标板传送CKFA的波特率设置

目标板引导ROM代码决定了CKFA从EICT传送到F281x的波特率,因为引导ROM在重启时不使能PLL。这样,目标板的CPUCLK取决于输入晶振频率,对F2812 eZdsp来说是30MHz。

重启后,低速外设时钟(LSPCLK)默认为CPUCLK/4,引导ROM代码不会改变LSPCLK。因此LSPCLK为7.5MHz。

SCI波特率寄存器最小值是1。因此重启时F281x目标板最大波特率是468Kbps。

以468Kpbs波特率传送CKFA要比通过RS-232以典型PC(超级终端)波特率——38Kbps或56Kbps——传送要快的多。另外,相对于AppCode动辄128KB或256KB的巨大体积,CKFA二进制文件要小的多(6.4KB)。因此关键是增加传送AppCode的波特率。

EICT:
CPUCLK = 150MHz
LSPCLK = 150MHz/2 = 75MHz
BRR=19
Baud-Rate = LSPCLK/((BRR+1)*8) = 468750 bps

Target:
CPUCLK = 30MHz                              【重启时PLL被旁路,引导ROM不使能PLL】
LSPCLK = 30MHz/4 = 7.5MHz                   【重启后默认除以4】
BRR=1                                       【由SCI自动波特率特性设置】
Baud-Rate = LSPCLK/((BRR+1)*8) = 468750 bps

4.2.2.2 从EICT向F281x目标板传送AppCode的波特率设置

CKFA代码控制F281x目标板,因此SCI波特率可以配置为外部链接的硬件所能支持的最大值。F281x SCI最大波特率为20Mbps,受限于F281x IO缓冲器速度。

CKFA软件配置PLL为×5,因此CPUCLK为150MHz。

CKFA软件配置LSPCLK=CPUCLK/2,因此LSPCLK为75MHz.

本应用报告中使用的硬件的SCI波特率最小值为4,对应于F2812 eZdsp目标板最大波特率1.875Mbps。曾测试过BRR值为3(2.34Mpbs),但引起了串行通讯错误。

EICT:
CPUCLK = 150MHz
LSPCLK = 150MHz/2 = 75MHz
BRR=4
Baud-Rate = LSPCLK/((BRR+1)*8) = 1.875 Mbps

Target:
CPUCLK = 150MHz                              【PLL被CKFA使能】
LSPCLK = 150MHz/2 = 75MHz                    【CKFA设置为除以2】
BRR=4                                        【由SCI自动波特率特性设置】
Baud-Rate = LSPCLK/((BRR+1)*8) = 1.875 Mbps

4.2.3 ICT Flash烧写过程

使用ICT,波特率就可以快的多。在前面的章节中,使用PC进行Flash烧写时,RS-232收发器会进行速度限制。现在,将处理器的串行引脚直接相连,就没有限制了。基于ICT的系统,波特率可以大于2Mbps。在本应用报告中,使用F2812 eZdsp仿真ICT时,波特率达到了1.875Mbps。

4.2.3.1 连接PC与EICT

你必须通过一个RS-232线缆将PC和用作ICT的F2812 eZdsp连接起来。由于F2812 eZdsp没有RS-232收发器,因此使用了Link-Research公司的RS-232接口产品。Link Research公司的LR-2812COM-2接口板详细产品信息可从http://www.link-research.com/下载。

LR-2812COM-2接口板与Spectrum Digital eZdsp的接线(略,Table 4略)

4.2.3.2 连接EICT与F281x目标板

将EICT的SCI-A与目标板的SCI-A接口连接起来,注意EICT的SCITXDA应与目标板的SCIRXDA连接。(Table 5略)

4.2.3.3 准备EICT软件

根据下面的步骤,连接IEEE Std. 1149.1-1990(JTAG)仿真器与EICT。
1. 连接IEEE Std. 1149.1-1990(JTAG)仿真器与EICT。
2. 打开CCS工作空间SCI_FLASH_AppReport.wks。
3. 重启CPU。
4. 加载代码。
5. 运行real-time模式。
6. 将Watch和Memory窗口设置为在real-time模式下持续更新。

4.2.3.4 锁定PC与EICT的波特率

EICT软件首先将EICT硬件的波特率与PC(超级终端)的波特率匹配。在CCS中运行EICT软件,在超级终端中键入'a'或'A'(包括引号)。作为回应,EICT软件会确认EICT波特率已锁定,做好了CKFA二进制文件的传输准备(见Figure 25).

【Figure 25. EICT准备好从PC接收CKFA】

4.2.3.5 从PC将CKFA和AppCode传送到EICT RAM中

按照3.4.1节的步骤,用超级终端传送CKFA软件。在超级终端上,点击“传送”——“发送文本文件”,从CKFA工程Debug文件夹中选择CKFA.bin。

【Figure 26. EICT准备好从PC接收AppCode】

按照3.4.4节的步骤,用超级终端传送AppCode软件。在超级终端上,点击“传送”——“发送文本文件”,从AppCode工程Debug文件夹中选择AppCode.bin。

4.2.3.6 锁定EICT与F281x目标板引导ROM代码的波特率

现在CKFA和AppCode二进制文件都保存在EICT的RAM中。EICT现在可以执行前面所述的标准步骤,但不是使用慢速的超级终端RS-232传输,而是使用EICT快速直连。

EICT将要执行的步骤传送到超级终端上(Figure 27)。PC连接到EICT的SCI-B上,这不会对EICT和目标板通过SCI-A进行的通讯产生干扰。

【Figure 27. EICT准备好开始F281x目标步骤】

4.2.3.7 从EICT将CKFA传送到F281x目标板

让CCS运行在real-time模式,将Watch和Memory窗口配置为持续刷新,给F281x目标板先下电再上电。保持第二个Wathc窗口页打开。对F2812 eZdsp,你需先将5V电源关掉,再重新打开。

注意EICT的SCIA有一个接收错误,典型情况下SciaRegs.SCIRXST.all值为178。按照超级终端上的指令,向SciaRegs.SCIFFTX.bit.SCIRST先写0再写1,以复位EICT的SCIA。注意现在SciaRegs.SCIRXST.all值为0.

设定目标板的波特率。在观察窗口中键入自动波特率字符'a'或'A',SciaRegs.SCITXBUF='a'。注意包括引号。作为回应,目标板会将自动波特率字符发回,你会在Watch窗口的SciaRegs.SCIRXEMU中看到它(97='a').

现在目标板准备好接收CKFA了。在开始传输前,准备CCS的Memory窗口来接收目标板传来的信息。在 Edit菜单中,选择Memory——Fill。将从0x3F8000开始,长0x2000的区域用0x3131(“11”)填充(Figure 28)。

【Figure 28. 准备Memory窗口来接收目标板传来的信息】

在Watch窗口中,将flag_ReadyToTransferCKFA设为0,以启动CKFA传输。当Memory窗口显示“Processor is unlocked. Communication kernel received and executing. Type 'a' to relock baud-rate:(见Figure 29)”时,传输完成。下一步是增加EICT波特率。

【Figure 29. 从EICT向目标板传送CKFA成功】

4.2.3.8 锁定新的最大波特率

在Watch窗口中,将EICT波特率寄存器SciaRegs.SCILBAUD设为4。运行在目标板上的CKFA软件已经使能了SCI-A自动波特率逻辑,以将自身波特率与新的EICT波特率锁定。

在Watch窗口中,将SciaRegs.SCITXBUF设为自动波特率字符('a'或'A')(注意包括引号)。作为回应,目标板会发回自动波特率字符,你会在Watch窗口的SciaRegs.SCIRXEMU中看到它(97='a')(Figure 30).

【Figure 30. CKFA波特率重新与EICT锁定在1.875Mbps】

目标板发回消息“Erase Flash?”,作为回应,在Watch窗口中,将SciaRegs.SCITXBUF设为'y'(注意包括引号)。CKFA软件将擦除目标板的Flash。

在Memory窗口中可以看到,目标板发回消息“Erasing...please wait”.

4.2.3.9 从EICT将AppCode传送到F281x目标板

在Watch窗口中,将fllag_ReadyToTransferAppCode设为0,以开始AppCode传输。当Memory窗口显示“*** erasing done. Ready for application data transfer”(见Figure 31)时,传输完成。

【Figure 31. 将AppCode烧写到目标板Flash成功】

当Memory窗口显示“** application programmed. Flash Checksum=0x6E13. **checksum verified”时,AppCode传输与烧写完成。这与用超级终端烧写结束后收到的信息相同。

烧写时间列在Watch窗口中:

(start_time - end_time) / 150e6 = 1.398 seconds

这是使用F28x CPU递减计数器形成的基准时间。


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
技术心得、资料备忘、自翻译文档。
最近文章
NE555工作原理
2010-06-19 10:34:01
讲CMD格式的文档
2010-06-11 10:00:18
DSP/BIOS空间裁剪
2010-06-10 09:37:44
推荐文章
最近访客