ENGLISH 简体中文 日本語 한국어  


应用笔记3413

初始化高速TINI系统

摘要:在DS80C400处理器出现之前,由于受到DS80C390处理器最高速度的限制,TINI®系统最高运行于40MHz频率。DS80C400处理器的频率可达75MHz,因此TINI固件增加了相应的支持功能,以允许系统在可能的最快晶体倍频器下运行。但是,为了降低系统成本,TINI参考设计(TINIm400与TINIs400)没有设计为高速运行状态。很多开发人员试图在4倍晶体倍频器设置下运行他们的TINI系统,但是无一例外,最后TINI系统会停止工作。出现这种情况并不是因为DS80C400处理器不支持该速率,而是闪存不能支持该速率。因此,高速TINI系统需要一个带有RAM的定制电路板,以实现固件存储和执行。本应用笔记将讨论这样的高速TINI系统的初始化问题。

闪存限制

通常,闪存是高速TINI设计中的主要限制因素。最好的商用闪存具有55ns的访问时间。下表给出了DS80C400 CPU速率与AM29LV081闪存1之间的关系:

Rated Flash Speed Max CPU Speed
55ns 40MHz
70ns 33MHz
90ns 27.5MHz
120ns 21MHz
150ns 17MHz

现有的数据使开发人员需要进行选择 ― 从闪存运行程序,运行速率限至为40MHz;或者从RAM运行程序,速率高达75MHz。若使用DS80C400与TINI OS实现高速设计,必须更改常规的TINI存储器配置(如TINIm400的配置)。

TINI OS的存储器要求

为在DS80C400上运行TINI Java™运行环境(TINI OS),在CE0 (地址0)上必须至少有512k RAM,并且在CE2 (地址400000h)上另外有512k代码空间。在TINIm400中,代码空间通过闪存实现,但是通过RAM也同样容易实现。

使用RAM作为应用代码空间所产生的问题是初始情况下它是空白的,并且在电源移除和电池耗尽时会擦除RAM,一些其它外部事件也可能清除其内容。TINI应用通常用于远程监视和控制,如果出现设备代码丢失,将使现场升级非常困难。解决方案是将应用程序的映像从位于常规TINI存储器分配表之外的闪存复制到RAM中。

另外一种存储器分配表

考虑以下用于高速TINI的存储器分配表。

图1. 可能的高速TINI系统存储器分配表
图1. 可能的高速TINI系统存储器分配表

该存储器分配表包括两个512k RAM,位于TINI OS需要的位置(一个在地址0,一个在地址400000h)。还在地址600000h处包含一个附加的闪存。该闪存包含初始化应用程序,完成以下功能:
  • 初始化堆
  • 复制固件和应用代码映像至地址400000h
  • 控制权转交给TINI OS
DS80C400启动引导加载程序后,会从存储器的最高地址开始寻找可执行程序并运行它。当发现有效的TINI应用程序标记时,它会将控制权转至该地址。我们可以将启动代码放在起始地址6F0000h处,以保证这是最先找到的应用程序代码。有效的TINI标记位于一个64K存储器区的地址0处,并包括如下的结构:

SJMP statement String 'TINI' Bank Number (or 0)
2 bytes 4 bytes 1 byte

关于该过程的更多信息请参考DS80C400数据资料2的“Find-User Code”部分。

使固件运行更快

我们提供定制的TINI硬件设计方案,还需要更改固件以实现更快的运行速度。

随TINI软件开发包出厂的TINI固件已经预先编程为在14MHz晶体的2倍频下运行。高速TINI系统通常运行于14MHz或者18MHz晶体的2或4倍频下。可以使用TBINFixer tool对TINI固件进行更改,以工作于不同的晶体速率和倍频器下。不带参数执行该应用程序时,可了解各命令行选项。通常,只有晶体倍频器(-m选项)和晶体值(-c选项) 需要更改。使用TINI SDK中的tini400.tbin文件作为此应用程序的输入文件。

启动应用程序

为运行于更快的晶体倍频器而更改完固件后,现在我们将注意力转移到TINI系统初始化程序,以实现从RAM运行程序。这里给出的典型启动应用程序采用汇编语言编写,并使用免费工具(macro与a390)构建,该工具包含在TINI软件开发包中。

对于启动应用程序,我们选择在闪存中以TBIN3文件格式存储TINI固件和Slush应用程序。因此,启动应用程序需要对TBIN文件格式进行分析处理。这样的优点是TBIN格式存储了其数据的所有地址信息,使启动应用程序更加通用。

init.a51文件4给出了一个初始化应用程序。它读取存储在闪存中的TBIN文件,并将这些文件拷贝到RAM,然后转而执行RAM内的程序。代码是通用的,尽管针对不同的存储器配置,可能需要对三个存储位置进行一些调整:
  • TBIN_GLOB_ADDRESS equ 600000h
    这是TBIN文件的存储地址。存储于此的映像应使用BuildTBIN应用程序构建(参考下一部分)。
  • EXECUTE_ADDRESS equ 400000h
    对于TINI Java运行环境,地址应该保持为400000h (对于用C编写的应用程序,可以更改此地址值)。应用程序初始化完成后,将执行LJMP跳转至该地址,以转换应用程序控制。
  • org 6F0000h
    应用程序的org语句用于指定代码的存储位置。
采用初始化应用程序的缺省配置,存储于地址600000h的TBIN文件将会拷贝到RAM中(位于由TBIN文件自身指定的地址)。拷贝完成后,程序执行将转换到地址400000h。

开发人员应该考虑当前初始化代码中的以下几个问题:
  • 串行调试:初始化应用程序配置定时器2来生成串口0的波特率。(应用程序包括几个等式用于调节波特率。) 它为每个正在复制到RAM的TBIN记录输出相关信息。可以移除所有的串口程序,而不会影响初始化代码的功能。
  • 多重循环拷贝(unrolled copy):Copy256函数包括多重循环的256字节拷贝(即16个单字节拷贝的16次循环)。这对性能有好处,但会增加代码量。如果代码量优先于启动延迟,那么应首先注意该部分。
  • POR检查:在初始化代码拷贝TINI固件和应用程序之前,并不进行POR检查。但是,如果在未重新上电的情况下TINI应用程序有意复位系统,那么该功能是非常有用的。这种情况下,应用程序可以跳过拷贝,而直接进入代码执行阶段。注意,需要分清有意和无意的看门狗复位。无意的看门狗复位可能意味着TINI工作不正常,出现这种情况时,重新加载应用程序代码是比较好的选择。
  • RAM擦除:启动代码同时还擦除RAM的开始64k字节内容,以确保系统具有干净的起始状态。如果位于CE0的RAM是采用电池备份的,那么可以取消该操作。该启动代码已内置,因为很多TINI系统假定文件系统在上电时需要重新初始化。
用macro (macro预处理器)和a390 (汇编器)来构建启动代码,命令如下:
	macro init.a51
	a390 -l -Ftbin -d -p 400 init.mpp
生成的文件名为init.tbin,该文件应该和BuildTBIN应用程序的输出文件一起加载到TINI系统。详细信息见下一部分。

BuildTBIN应用程序

BuildTBIN应用程序为Java程序,可以输入一个或多个TBIN文件,并合并成一个文件,从而用于前一部分所提到的启动应用程序。由于高速应用程序将拷贝位于地址600000h的Slush和TINI固件至适当的存储位置,BuildTBIN的命令行如下所示:
 java BuildTBIN 600000h file_to_load.tbin slush400.tbin tini400.tbin
这时,将合并slush400.tbin与tini400.tbin文件并生成file_to_load.tbin文件,其目标地址为600000h。file_to_load.tbin文件应该随init.tbin文件一起加载到TINI系统。

BuildTBIN应用程序读取输入的TBIN映像并按照二进制数据进行处理,重新打包为具有不同目标地址的另一个TBIN文件。这里存在一个复杂的问题:启动应用程序需要知道包含了多少个TBIN记录。这对于像JavaKit和MTK这样的加载程序来说不是问题,它们是通过寻找EOF (文件末尾)来判断何时不再有TBIN文件记录的。为了解决该问题,输出TBIN文件将文件中TBIN记录的数目作为其第一个字节包含进来。因为一个TBIN文件可能包括超过一个TBIN记录,BuildTBIN应用程序必须分析每个输入TBIN文件以计算其包括的记录数目。

图2. BuildTBIN程序读取输入TBIN文件,增加一个“数目”字节,将所有信息作为二进制流处理,然后输出一个新的TBIN格式文件。由于每个TBIN记录都包括一些开销,因此需要注意尽管输入文件仅包含8个TBIN记录,而输出文件则包含多达9个记录。
图2. BuildTBIN程序读取输入TBIN文件,增加一个“数目”字节,将所有信息作为二进制流处理,然后输出一个新的TBIN格式文件。由于每个TBIN记录都包括一些开销,因此需要注意尽管输入文件仅包含8个TBIN记录,而输出文件则包含多达9个记录。

TBIN文件格式的说明请参考:http://files.dalsemi.com/tini/ds80c400/c_libraries/tbinformat.html。BuildTBIN工具资源可从http://files.dalsemi.com/tini/ds80c400/tools/buildtbin获取。

如果您还想在最终TBIN映像中包含非TBIN数据,可以使用Bin2TBIN工具将任何二进制数据转换为TBIN格式。该工具资源可从http://files.dalsemi.com/tini/ds80c400/tools/bin2tbin获取。

结论

该笔记中初始化高速TINI系统的方法是许多可能的解决方案中的一种。此文章和配套的代码既是问题解决方案,也可以作为解决问题的学习资料。通过增加RAM和闪存,可以实现稳定的高速TINI系统,从而充分利用DS80C400处理器的性能。

相关链接
  • TINI软件开发包
  • 高速用户指南补充资料:http://files.dalsemi.com/tini/ds80c400/tools/DS80C400
  • DS80C400数据资料
  • 论坛 (English only)
  • 应用笔记的源代码: http://files.dalsemi.com/tini/appnotes/highspeed/highspeed_initcode.zip
注释
1 应用笔记“DS80C400/410/411 Flash Memory Selection”提供了兼容闪存器件的相关信息
2 DS80C400数据资料
3 有关TBIN文件格式的信息请参考:http://files.dalsemi.com/tini/ds80c400/c_libraries/tbinformat.html
4 本应用笔记的源码可从http://files.dalsemi.com/tini/appnotes/highspeed/highspeed_initcode.zip


我们期待您的反馈!
喜欢?不喜欢?有待改善?或为我们提供建议?请与我们联系 — 我们将根据您的意见或建议改善我们的工作。 网页评价或提供建议


自动更新
需要自动接收最新发布的应用笔记吗?请订阅EE-Mail™ (English only)。



更多信息  APP 3413: Apr 04, 2005
DS80C400 网络微控制器 完整的数据资料
(PDF, 2.1MB)
免费样品
 

下载,PDF格式下载,PDF格式 (100kB)
 AN3413, AN 3413, APP3413, Appnote3413, Appnote 3413


      隐私权政策    法律声明

      © 2008 Maxim Integrated Products, Dallas Semiconductor版权所有