在DS80C400之前,TINI®系统被限制在最大40MHz下运行,受到DS80C390处理器最高速度的限制。DS80C400承诺提供75MHz的信号,因此在TINI固件中增加了支持,使系统能够以允许的最快晶体倍增器运行。然而,为了使系统经济实惠,TINI参考设计(TINIm400和TINIs400)并非设计用于在这些高速下运行。许多开发人员尝试在 x4 晶体乘数设置下运行他们的 TINI,每个人都最终注意到他们的 TINI 只是停止了。原因不是DS80C400处理器不能支持这个速度,而是闪存不能支持这个速度。因此,高速TINI系统需要一个带有RAM的定制板,用于固件存储和执行。本应用笔记将讨论如何初始化这种高速TINI系统。
闪存限制
闪光通常是高速TINI设计中的限制因素。最好的商用闪光灯的访问时间为55ns。下图显示了这与DS80C400 CPU速度和AM29LV081闪存的关系。
额定闪光速度 | 最大中央处理器速度 |
55ns | 40兆赫 |
70ns | 33兆赫 |
90ns | 27.5兆赫 |
120ns | 21兆赫 |
150ns | 17兆赫 |
此处提供的数据留给开发人员一个选择:用完闪存并限制为 40MHz 执行速度,或者从 RAM 中执行并运行高达 75MHz。为了实现使用DS80C400和TINI OS的高速设计,必须改变正常的TINI存储器映射(如TINIm400)。
天宇操作系统内存要求
要在DS80C400上运行TINI Java™运行时(TINI OS),CE0(地址0)上必须至少有512K RAM,CE2(地址400000h)上必须有另外512K的代码空间。在TINIm400上,代码空间以闪存的形式实现,但它可以很容易地实现为RAM。
应用程序代码的 RAM 的问题在于它最初是空白的,如果电源断开、电池耗尽或某些其他外部事件擦除其内容,则会擦除它。TINI应用程序通常用于远程监测和控制,如果设备丢失其代码,现场更新将非常不方便。解决方案是从位于正常 TINI 内存映射之外的闪存将应用程序的映像复制到 RAM 中。
备用内存映射
考虑以下高速 TINI 的内存映射。
图1.高速 TINI 系统的可能内存映射。
此内存映射在 TINI OS 所需的位置显示两个 512K RAM(一个位于地址 0,一个位于地址 400000h)。它还在地址 600000h 处包含一个额外的闪存。此闪存包含一个初始化应用程序,该应用程序负责:
初始化堆
将固件和应用程序映像复制到地址 400000h
将控制权移交给TINIOS
当 DS80C400 引导加载程序启动时,它会从内存顶部启动并搜索要运行的可执行文件。当它找到有效的 TINI 应用程序签名时,它会将控制权转移到该地址。我们将启动代码放在地址 6F0000h 处,确保它是找到的第一个应用程序代码。有效的 TINI 签名由 64K 内存库地址 0 处的以下结构组成:
SJMP 声明 | 字符串“TINI” | 银行号码(或 0) |
2 字节 | 4 字节 | 1 字节 |
参见DS80C400数据资料中的“查找用户代码”部分2有关此过程的更多信息。
使固件运行得更快
现在我们已经设计了定制的TINI硬件,我们需要更改固件以更快的速度运行。
TINI软件开发套件附带的TINI固件经过预编程,可在14MHz晶体上以晶体乘法器2运行。高速TINI系统通常在14MHz或18MHz晶体上以2或4的倍数运行。可以使用TBINFixer工具针对不同的晶体速度和乘法器更改TINI固件。运行此应用程序,不带参数以查看命令行选项。通常,只需要更改晶体乘数(-m 选项)和晶体值(-c 选项)。使用 TINI SDK 中的文件 tini400.tbin 作为此应用程序的输入文件。
启动应用程序
随着固件更改为以更快的晶体乘法器运行,我们现在可以将注意力转向初始化 TINI 系统以在 RAM 外执行的程序。这里介绍的典型启动应用程序是用汇编编写的,并使用 TINI 软件开发工具包附带的免费工具(宏和 a390)构建。
对于此启动应用程序,我们选择将TINI固件和Slush应用程序存储为TBIN3闪存中的文件。因此,我们的启动应用程序将需要处理 TBIN 文件格式的解析。这样做的好处是TBIN格式存储其数据的所有地址信息,使启动应用程序具有更通用的用途。
文件 init.a514显示一个初始化应用程序,该应用程序读取存储在闪存中的一些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。
开发人员应考虑当前 init 代码中的几个问题:
串行调试:初始化应用程序配置计时器 2 以生成串行端口 0 的波特率。(该应用程序包含一些用于调整波特率的等价物。它输出有关正在复制到RAM的每个TBIN记录的信息。可以删除所有串行例程,而不会影响 init 代码的功能。
展开的副本:函数 Copy256 包含一个部分展开的 256 字节副本(展开为 16 个循环,每个循环 16 个单字节副本)。这对性能有好处,但会增加代码大小。如果代码大小比启动延迟更重要,那么这是首先查看的好地方。
POR 检查:初始化代码在复制 TINI 固件和应用程序之前不会检查 POR。但是,如果 TINI 应用程序故意复位而不循环电源,则可能需要这样做。在这种情况下,应用程序可以跳过复制并直接执行代码。请注意,建议区分有意和无意的监视器重置。无意的看门狗重置可能意味着 TINI 功能不正常,在这种情况下,重新加载应用程序代码值得考虑。
RAM 擦除:启动代码还会擦除前 64 KB 的 RAM,以确保系统干净启动。如果 CE0 上的 RAM 是电池供电的,则可以删除此操作。之所以包含此启动代码,是因为在通电时,许多 TINI 系统假定文件系统需要重新初始化。
宏(宏预处理器)和 a390(汇编器)用于构建启动代码,使用以下命令: 生成的文件称为 init.tbin,应与 BuildTBIN 应用程序的输出一起加载到 TINI 系统上,详见下一节。 macro init.a51 a390 -l -Ftbin -d -p 400 init.mpp
构建TBIN应用程序
BuildTBIN 应用程序是一个 Java 应用程序,它采用一个或多个 TBIN 文件并将它们格式化为一个文件,可由上一节中介绍的启动应用程序使用。由于我们的高速应用程序会将 Slush 和 TINI 固件从地址 600000h 复制到其正确位置,因此 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 记录都包含一些开销,请注意,输出文件最多可以包含 9 个 TBIN 记录,尽管输入文件仅包含 8 个。
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处理器的功能。
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !