应用程序选择器
Cyclone® III 版 Nios® II 嵌入式评估套件应用程序选择器是非常实用的工具,帮助您在嵌入式评估套件电路板上迅速选择、装入并运行不同的应用程序,而电路板并不需要和计算机连接。采用文件分配表文件系统来存储应用程序,该系统在电路板的安全数字 (SD) 卡上,启动时加载。应用程序选择器不但可以为 Nios II CPU 装入新软件,还能为 FPGA 装入新硬件。应用程序包括硬件镜像和软件镜像。
除了 Cyclone III 版 Nios II 嵌入式评估套件 提供的预封装应用程序,您还可以轻松地转换自己的应用程序,由应用程序选择器装入这些程序。
从哪里得到应用程序选择器
应用程序选择器包含在 Cyclone III 版 Nios II 嵌入式评估套件中,也可以从 Altera 网站上下载。下载应用程序选择器 ( .zip ) 文件。
运行应用程序选择器
启动工具—— 启动 应用程序选择器时, Cyclone III 版 Nios II 嵌入式评估套件连接电源,打开电源 (SW1) 。如果电路板已经上电,按下 RECONFIGURE 按钮,电路板复位。为保证电路板正确复位,可能需要按两次电源按钮。
应用程序选择器从闪存中导入,应用程序选择器搜索 SD 卡中的应用程序时,屏幕快速闪动。然后,出现主菜单,显示可加载的应用程序列表。
出现主菜单后,应用程序名按序号显示在列表中。这些是在 SD 卡中找到的应用程序,现在可以加载。触摸某一程序,它会高亮显示。如果 SD 卡中的应用程序超过 5 个,触摸屏幕右侧的上滚和下滚按钮,滚动显示列表。
查看应用程序的信息—— 如果需要了解选择器中某一应用程序的详细信息,在触摸屏上触摸该应用程序,高亮显示它 ,然后触摸 Show Info 按钮。出现滚动文本窗口,显示该程序的其他信息。如果需要返回主菜单,触摸 OK 按钮。
装入并运行应用程序—— 确定要装入的应用程序后,触摸该应用程序,使之高亮显示 ,然后,触摸屏幕上的 Load 按钮。开始装入应用程序,出现一个小窗口,显示装入进度。装入过程需要 2 到 30 秒,具体时间取决于应用程序的大小,以及它以前是否在板上闪存中缓冲过。
应用程序选择器详细信息
SD 卡目录结构—— 应用程序选择器采用 SD 卡主要用于存储应用程序。 SD 卡必须采用文件分配表 16(FAT16) 文件系统格式,最大容量为 2 Gbytes 。支持长文件名。 SD 卡中所有可装入的应用程序必须位于名为 Altera_EEK_Applications 的顶层目录中。
在 Altera_EEK_Applications 目录中,每一应用程序都位于自己的子目录中。子目录的名称非常重要,选择器以该名称在主菜单中显示应用程序。您可以按自己的要求对子目录命名,使应用程序显示在应用程序选择器菜单中。只要符合文件分配表 16 文件系统长文件名要求,子目录名称可以任意选择。支持空格。
应用程序文件—— 每一个可装入应用程序含有两个闪存文件和一个可选文本文件,都存储在 SD 卡中。
一个闪存文件代表实例的软件部分,它必须来自 .elf 文件。该闪存文件可以任意命名,唯一的限制是名称必须以 _sw.flash 结束。
另一闪存文件代表实例的硬件部分,它必须来自 .sof 文件。该文件可以任意命名,唯一的限制是名称必须以 _hw.flash 结束。
可选文本文件含有应用程序的其他信息。在应用程序选择器工具中,触摸 Show Info 按钮,高亮显示的应用程序会弹出一个窗口,显示该文件中的文本。文本可以有多个段落,但也不能太长,因为应用程序选择器并不支持滚动显示大量的文本。该文本文件的名称必须是 info.txt ,否则应用程序选择器将无法识别它。
CFI 闪存 ——应用程序选择器使用公共闪存接口 (CFI) 闪存来存储硬件镜像、软件镜像、应用程序导入代码和闪存镜像目录。
- 硬件镜像 — 应用程序选择器硬件镜像永久存储在闪存地址 0x20000 处。
要装入的应用程序硬件镜像在装入时被写入到 0x280000 和 0xA00000 地址之间。具体位置取决于高速缓冲。请参考 硬件镜像高速缓冲 一节,了解详细信息。
- 软件镜像 — CFI 闪存存储应用程序选择器本身的软件镜像以及要装入的应用程序的软件镜像。应用程序选择器使用的所有软件镜像都含有一个导入拷贝器,在文件转换过程中, elf2flash 对它进行了预处理。在运行前,导入拷贝器将软件代码复制到 RAM 中。
应用程序选择器软件镜像永久位于闪存地址 0x100000 处。
要装入的应用程序软件镜像在装入时被写入到闪存地址 0x180000 处。软件镜像必须小于 1 Mbyte ,否则会覆写位于地址 0x280000 处的应用程序硬件镜像。
- 应用程序导入代码—— 应用程序选择器装入的所有应用程序必须含有一个 Nios II 嵌入式处理器,其复位地址设在 CFI 闪存 0x0 处。考虑到这一点, CFI 闪存的 0x0 处永久设置一个导入代码通用位。导入代码非常短,只完成以下功能:
- 清除 Nios II 指令缓冲
- 清除 Nios II 指令流水线
- 跳转到 0x180000
应用程序被应用程序选择器装入后,其软件镜像位于 0x180000 处。对 FPGA 重新配置时, Nios II 处理器执行位于 0x0 的导入代码,跳转到实际应用程序软件镜像的预处理导入拷贝器,软件镜像位于 0x180000 ,拷贝器将应用程序复制到 RAM 中,然后,运行应用程序。
- 闪存镜像目录—— CFI 闪存中存有 10 个最近装入的应用程序硬件镜像,以加速这些应用程序的装入。为掌握闪存中目前存储了哪些硬件镜像,在 CFI 闪存的 0x8000 处设置了闪存镜像目录。本文档“硬件镜像缓冲”一节详细介绍了怎样实现这一目录。
远程更新 ——应用程序选择器主要依靠 Cyclone III FPGA 系列的远程更新功能。利用远程更新功能, Nios II 处理器或者 FPGA 中的其他逻辑使 FPGA 能够从并行闪存中的特定位置进行重新配置,例如 CFI 等。应用程序选择器利用 Nios II 处理器从 SD 卡读取硬件镜像,以新硬件镜像对自己重新配置,设置到 CFI 闪存的某一位置,然后,利用远程更新功能,从该位置对 FPGA 重新进行配置。
硬件镜像缓冲—— 把数据从 SD 卡复制到闪存时会很慢,原因在于串行外设接口 (SPI) 模式下的闪存写入速率以及 SD 卡的读取速率较慢。然而,由于远程更新功能支持从闪存的任意位置对 FPGA 进行重新配置,因此,应用程序选择器可以把某些常用的应用程序硬件镜像一直放在 ( 缓冲 ) 闪存中,以避免在每次装入应用程序时,把它们从 SD 卡复制过来。
应用程序选择器可以在 CFI 闪存中缓冲 10 个应用程序硬件镜像。当您使用应用程序选择器从 SD 卡中装入应用程序时,应用程序选择器首先扫描目前闪存中缓冲的硬件镜像目录,是否有和请求的硬件镜像相匹配的镜像。如果有一个匹配,应用程序选择器从该镜像地址重新配置,而不用从 SD 卡将该镜像复制到闪存中。这大大缩短了装入时间。
缓冲硬件镜像时,要求应用程序选择器能够确定 CFI 闪存中的镜像是否和 SD 卡中被请求的镜像一致。读取两个镜像,全面进行内容对比需要较长的时间,体现不出首先采用缓冲的优势。因此,为确定闪存中的硬件镜像是否和 SD 卡中的硬件镜像相匹配,采用一个 32 位时间戳作为标签。在文件转换过程中, sof2flash 在硬件镜像的 .flash 文件第一行插入一个 32 位时间戳,作为 S0 类记录 ( .flash 文件格式是 .srec ) 。当应用程序选择器要装入硬件镜像时,它检查 SD 卡中的 .flash 文件。如果 .flash 文件第一行的 S0 记录中含有一个 32 位 ASCII 编码号,则认为这是一个有效的时间戳标签。
然后,应用程序选择器扫描闪存镜像目录,寻找含有匹配时间戳的条目。如果在目录中找到了匹配的时间戳,这意味着要装入的硬件镜像已经在闪存中了,可以直接利用它来重新配置 FPGA ,没有必要再复制了。关于闪存镜像目录的详细信息,请参考下面的“闪存镜像目录”一节。
闪存镜像目录—— 闪存镜像目录是一个简单的数据库,含有目前存储 ( 缓冲 ) 在闪存中的应用程序硬件镜像信息。闪存镜像目录位于闪存的第一扇区,地址 0x8000 ,长度为 0x8000 字节。
目录机制采用了“ Zero = Spent, 'F' = Available(ZSFA) ”的方案。当只需要把几个字写入到闪存中时,这一方案避免了擦除整个存储器扇区。利用 ZSFA ,闪存中 0x0 的字被认为已经“使用”了,不能用于存储数据。 0xFFFFFFFF 的字是“可用”的,因为它处于已擦除状态。目录中的其他值都被认为是有效条目。
通过 ZSFA ,需要读取目录条目时,从最低地址开始扫描扇区,直到出现第一个 0xFFFFFFFF 值为止。遇到的所有非零值都是有效的目录条目。当需要写入一个目录条目时,扫描扇区,直到找到第一个 0xFFFFFFFF 值,写入新的目录条目。
要擦除目录条目,扫描扇区以找到它,然后写入 0x0 ,标志为“已用”。没有“可用”数据条目点时,才需要对含有 ZSFA 目录的扇区进行擦除。
对于应用程序选择器,每一闪存目录条目含有两个连续 32 位字。第一个字是闪存中当前硬件镜像的 32 位时间戳。第二个字是镜像本身的 32 位闪存地址。总是把条目作为一个整体进行擦除和建立,每次两个字。
在缓冲中,把最近装入的硬件镜像存储在闪存的固定位置。 ZSFA 闪存镜像目录记录存储在这些位置的每一硬件镜像的时间戳和镜像地址。当需要装入新的硬件镜像时,应用程序选择器比较在 SD 卡中找到的硬件镜像和 ZSFA 闪存镜像目录中存储的所有时间戳。如果有匹配的,它跳过从 SD 卡复制硬件镜像这一过程,因为镜像已经在闪存中了。它从闪存中的硬件镜像地址开始进行重新配置,该镜像的标签含有相同的时间戳。如果没有和时间戳匹配的目录条目,从 SD 卡将硬件镜像复制到闪存中,然后将该硬件的镜像时间戳记录在闪存镜像目录中。
|