固件更新如何设计?

lvmeisi 2008-01-18 09:29:12
  本人在项目中设计的系统需要在线更新,是一个基于DSP的系统,就是可以通过上位机经过网口更新配置里面的算法程序及参数,但是不知道具体的框架设计.因为要更新肯定要涉及到FLASH的烧写,但又不是全部擦除和烧写,只更新需要更新的,那这个如何控制呢,又如何重新BOOT.这一块之前没有接触到,若有达人有这方面经验,望指导.
...全文
93 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ningxin 2008-01-22
  • 打赏
  • 举报
回复
基本的启动程序,不可以动。因为如果在更新的时候掉电,就和中了CIH病毒一个下场了。除非在硬件上设计一个备份的启动,不过这样做就很不划算。
程序架构应该至少分为三块,一块是程序的基本框架,包含了必须的功能(类似于BIOS+操作系统,或者更确切的说,是bootrom,这部分基本不会动)。一块是可变参数的程序和数据存储区(类似于windows下的用户程序)。当然,你也可以把程序和数据块分开,这个要看你的具体应用而定,一般分开要更好些。更新的时候,只更新这部分程序和参数。同时,考虑到更新失败的特殊情况,还需要用一块区域来做备份。当系统尝试启动应用程序出现异常的时候,自动跳转到备份程序运行。如果系统更新后运行成功,则自动更新备份区域。
系统在运行的时候,程序一般跑在SRAM或者SDRAM里面,因为对DSP来讲,Flash太慢了,尤其写的时候很麻烦。因此,一般来说,除了有些特殊应用不允许重启动之外,其它情况下都不需要考虑动态修改正在运行的程序,因为可以通过更新Flash后重启动完成更新任务。如果确实有不能重启的需求,而SDRAM又够大,那么你可以直接开辟一块内存,把你要更新的程序整块写到内存里,然后,再跳转到这块内存开始执行(可以用C语言里的函数指针来实现)。当然,有的变态应用,是连这样的跳转都不允许的(太慢,又或者内存不够大),那么只有动态修改程序内容了。这要求DSP有很好的任务调度机制,你可以用一个高优先级的任务,从网络接收数据,然后逐块刷新相应位置的内存区域。这对软件编写者的要求较高,一方面要对运行中的内存分布了如指掌,一方面要了解各程序模块之间的数据同步机制。稍不注意,系统就要跑飞或者是结果错误。
shuiyan 2008-01-22
  • 打赏
  • 举报
回复
ningxin 说的非常清楚,佩服一个。

从简单到复杂,对程序开发的要求也是越来越高。

主要还是看lz的项目需求:是否允许重启?如果允许,那就直接更新flash,如果不允许,就要更新SDRAM内存了。
lvmeisi 2008-01-21
  • 打赏
  • 举报
回复
to shuiyan

没有操作系统,在dsp里做的,有个类似操作系统的东西,dsp/bios,有SDRAM.

2楼的主要说了数据的更新,假如是程序更新呢?比如我要改变里面的程序,但是程序也正在跑着的.
shuiyan 2008-01-19
  • 打赏
  • 举报
回复
更新后要重启吧,不然新的配置及数据无法起作用。软重启其实很简单,不是重点。

有操作系统吗?
有SDRAM吗?
如果没有,那么程序就是在片内的FLASH上跑,更新的时候就要注意刷新数据的位置。

将FLASH分成相应的区域,烧录的时候,把需要更新的数据全部放到一个固定的地址。
在程序里操作该地址的数据。更新的时候,也只更新该地址起的区域。
mengzhiyi 2008-01-18
  • 打赏
  • 举报
回复
一般NAND flash是整块擦写的,那就只有把你要擦除和烧写的东西放在一个或几个固定的块上,然后只擦写这些位置就可以了,但这样没有办法实现负载平衡。如果你想实现更高级的功能,还是用移植一个文件系统在上面吧。
如果你的参数比较少的话,还是用EEPROM吧。
呵呵,没有具体玩过嵌入式,只说说自己的想法,请不要见笑。
[2015-01-15 更新] 添加 QCA9533 v2 支持 (暂无固件支持) 添加 TP-LINK TL-WR2041N v2 (QCA9558 + AR8236) 支持 修复在 32M Flash 上打开 TP-LINK 设置页面卡死的 BUG 修复使用新版 Flash 驱动后无法在 32M Flash 上启动固件的 BUG [2014-11-23 更新] AR2317 增加内存大小自适应的功能 AR7161 WNDR3700V2/WNDR3800/WNDRMAC 专用版修复 USB 灯常亮的问题 [2014-11-18 更新] 刷入编程器固件时如果不选择保留 U-Boot,不再检测固件是否合法,以便刷入其它闪存布局的固件。 [2014-11-16 更新] AR7240 再次修复刷原厂固件丢无线的 BUG (手抖造成的) 底层小更新 (所有芯片) [2014-10-26 更新] AR724x 添加 UBNT 编程器固件自动识别功能 [2014-10-7 更新] AR2317 修复无法刷入部分固件的 BUG 修复刷入编程器固件取消选择保留 U-Boot 却仍然保留 U-Boot 的 BUG 增加更多 Flash 支持 [2014-9-24 更新] WNDR3800 修复 OpenWrt 可能无法保存设置的 BUG WNDR3800 增加 CH 机型支持 增加品胜云座易充 (WMM003N) 及品胜无线音乐路由 (WPR001N) 支持 (先开机,再按复位键,否则无法开机,硬件问题) [2014-9-21 更新] 360 安全路由 C301 专用版完善恢复出厂设置的功能,支持 360 官方固件恢复出厂设置 修复小 BUG [2014-9-20 更新] 360 安全路由 C301 专用版增加刷写/备份第二 Flash 功能 360 安全路由 C301 专用版增加从第二 Flash 启动的功能 (目前无固件支持) 360 安全路由 C301 专用版增加刷写官方加密固件的功能 [2014-9-4 更新] 添加 DHCP 服务功能,连接到路由的设备可自动获取 IP 地址 增强网页稳定性,解决页面多次刷新后失去响应的问题 修复 AR9341/AR9344 内存初始化 BUG,增强稳定性,解决部分 MW300R v3/v4 FW300R v3/v4 无法启动的问题 [2014-8-31 更新] 360 安全路由 C301 专用版增加 NVRAM 修改功能,可修改 MAC 地址等设置 [2014-8-30 更新] 增加 360 安全路由 C301 专用版 [2014-8-28 更新] 修复 AR9344 通电有时无法开机 (灯全亮) 的问题 增加 AR9344 + AR8035 (上海贝尔 MSA2K-3513NA 专用版) 支持 U-Boot 选择说明 ** 请根据以下列出的硬件配置选择合适的 U-Boot 文件进行刷机 ** 选择 Flash 时,请在下方的列表中检查是否支持。 ** 在已列出的生产商中,绝大多数未列出的 Flash 型号是因为其 JEDEC ID 与已列出的 Flash 相同,因此可以直接使用 ** 凡在 U-Boot 控制台 [系统信息] 页中看到已识别出 Flash 型号,则表明使用此 Flash 没有问题 U-Boot 适用的硬件配置、机型、及原厂固件如下: [u-boot-ar2317.bin] 硬件配置: AR2317 + 88E6060 AR2317 + AR8236 AR2317 + ADM6996 内存: SDRAM / DDR 16-bit 大小自适应 机型: 山寨 UBNT: TP-LINK TL-WR541G+ v1/v2/v3 TP-LINK TL-WR340G+ v1/v2/v3/v4 Netgear WGR614v7 原厂固件: UBNT XS2 系列原厂升级固件 其他固件: OpenWrt atheros 平台的 sysupgrade 固件 DD-WRT 固件 说明: u-boot-ar2317-32m.bin 可用在 32M 及 64M 内存的路由上,但只能使用 32M 内存 u-boot-ar2317-64m.bin 只能用在 64M 内存的路由上,在 32M 内存路由上不能开机 此 U-Boot 支持最大 16M Flash;支持在大容量 Flash 上刷写小容量固件,如在 8M Flash 上刷写 4M 固件,则 4M 固件会被自动扩展成 8M [u-boot-ar7161-wndr3800.bin] 硬件配置: AR7161 + RTL8366SR 内存: SDRAM 16-bit 大小自适应 机型: Netgear WNDR3700 v2 Netgear WNDR3800 Netgear WNDRMAC 原厂固件: 同机型支持的固件 其他固件: OpenWrt / DD-WRT 固件 [u-boot-ar7240_ar7241.bin] 硬件配置: AR7240 / AR7241 内存: DDR / DDR2 16-bit 大小自适应 机型: AR7240: TP-LINK TL-WR740N v1/v2/v3 TP-LINK TL-WR740N v4 (中国版) TP-LINK TL-WR741N v1/v2/v3 TP-LINK TL-WR841N v5 TP-LINK TL-WR940N v1 TP-LINK TL-WR941N v4 TP-LINK TL-WR941N v5 AR7241: TP-LINK TL-WA801N v1 TP-LINK TL-MR3220 v1 TP-LINK TL-MR3420 v1 TP-LINK TL-WR840N v1 TP-LINK TL-WR841N v7 TP-LINK TL-WR842N v1 以及水星、迅捷马甲路由 原厂固件: 同机型支持的固件 UBNT XM 原厂升级固件 [u-boot-ar913x-88e6060.bin] 硬件配置: AR9132 / AR9130 + 88E6060 内存: DDR 16-bit 大小自适应 机型: TP-LINK TL-WR941N v1/v2/v3 TP-LINK TL-WR841N v3 原厂固件: 同机型支持的固件 [u-boot-ar9331.bin] [u-boot-ar9331-pisen.bin] 硬件配置: AR9331 内存: SDRAM / DDR / DDR2 16-bit 大小自适应 机型: TP-LINK TL-MR3020 v1 TP-LINK TL-MR3040 v1/v2 TP-LINK TL-MR3220 v2 TP-LINK TL-WR340G+ v7 TP-LINK TL-WR700N TP-LINK TL-WR702N TP-LINK TL-WR703N TP-LINK TL-WR740N v4 (国际版) TP-LINK TL-WR740N v5/v6/v7 TP-LINK TL-WR741N v4 TP-LINK TL-WR742N v5/v6 TP-LINK TL-WR743N v2 TP-LINK TL-WR745N v2 品胜云座易充 (WMM003N) 品胜单网口无线音乐路由 (WPR001N) 以及水星、迅捷马甲路由 原厂固件: TP-LINK TL-MR3020 v1 (国际版) TP-LINK TL-MR3040 v1/v2 (国际版) TP-LINK TL-MR3220 v2 (国际版) TP-LINK TL-WR703N 品胜云座易充 (WMM003N) 品胜单网口无线音乐路由 (WPR001N) 说明: u-boot-ar9331-pisen.bin 专用于品胜无线路由以解决其复位按钮无法使用的问题 u-boot-ar9331-pisen.bin 品胜路由进入 U-Boot 控制台,请先开机再按复位键,否则无法开机,这是硬件设计造成的。可以超频,但限制到 500MHz 不能用于 TP-LINK TL-WR720N v3 和 TP-LINK TL-WR710N,否则无法开机。 [u-boot-ar9331-wr720nv3_wr710n.bin] 硬件配置: AR9331 内存: DDR 16-bit 大小自适应 机型: TP-LINK TL-WR710N TP-LINK TL-WR720 v3 原厂固件: 同 u-boot-ar9331.bin 适用的原厂固件 说明: 针对 TP-LINK TL-WR720 v3 和 TP-LINK TL-WR710N 定制的,以解决其内存类型识别的 BUG。 [u-boot-ar9341.bin] 硬件配置: AR9341 内存: SDRAM / DDR / DDR2 16-bit 大小自适应 机型: TP-LINK TL-MR3420 v2 TP-LINK TL-WR841N v8 TP-LINK TL-WR842N v2 TP-LINK TL-WR843N TP-LINK TL-WR847N v3 TP-LINK TL-WR940N v2 以及水星、迅捷马甲路由 原厂固件: TP-LINK TL-MR3420 v2 (国际版) TP-LINK TL-WR841N v8 (国际版) TP-LINK TL-WR842N v2 (国际版) TP-LINK TL-WR843N (国际版) TP-LINK TL-WR940N v2 (国际版) [u-boot-ar9342-ar8327.bin] 硬件配置: AR9342 + AR8327 内存: SDRAM / DDR / DDR2 16-bit 大小自适应 机型: TP-LINK TL-WR1041N v2 原厂固件: TP-LINK TL-WR1041N v2 [u-boot-ar9344.bin] [u-boot-ar9344-wr941nv6.bin] [u-boot-ar9344-wdr3320v2.bin] [u-boot-ar9344-mw4530r.bin] [u-boot-ar9344-msa2k-3513na.bin] [u-boot-ar9344-qihoo-c301.bin] 硬件配置: AR9344 AR9344 + AR8327N AR9344 + AR8035 内存: SDRAM / DDR / DDR2 16-bit 大小自适应 机型: 百兆有线: TP-LINK TL-WR941N v6 TP-LINK TL-WR2041N v1 TP-LINK TL-WDR3310 TP-LINK TL-WDR3320 v2 TP-LINK TL-WDR3500 TP-LINK TL-WDR3600 TP-LINK TL-WDR5300 TP-LINK TL-WDR6300 v2 水星 MAC1200R 360 安全路由 C301 千兆有线: D-LINK DIR-825 C1 TP-LINK TL-WDR4300/TL-WDR4310/TL-WDR4320 水星 MW4530R 单口千兆: 上海贝尔 MSA2K-3513NA 原厂固件: 同机型支持的固件 说明: 所有 AR9344 的 U-Boot 都自动检测有线网络类型,为百兆千兆自适应的 凡未提到使用专用版的,全部使用通用版 u-boot-ar9344.bin ! u-boot-ar9344-wr941nv6.bin 专用于 TP-LINK TL-WR941N v6 以解决其复位按钮无法使用的问题 u-boot-ar9344-wdr3320v2.bin 专用于 TP-LINK TL-WDR3320 v2 以解决其 LED 不正常和 PCI-E 初始化的问题 u-boot-ar9344-mw4530r.bin 用于 水星 MW4530R 和 D-LINK DIR-825 C1,以便能够使用 WPS/QSS 和 RESET 按钮 u-boot-ar9344-msa2k-3513na.bin 专用于 上海贝尔 MSA2K-3513NA,以便 LED 和 RESET 按钮能正常使用;现在只能刷写原厂编程器固件 u-boot-ar9344-qihoo-c301.bin 专用于 360 安全路由 C301,支持刷写官方固件或 OpenWrt 固件 [u-boot-qca953x.bin] 硬件配置: QCA9531 / QCA9533 内存: SDRAM / DDR / DDR2 16-bit 大小自适应 机型: TP-LINK TL-WR802N v1 TP-LINK TL-WR841N v9/v10/v11 TP-LINK TL-WR842N v4 水星 MW305R v3 水星 MW316R v1 迅捷 FR300R v9 原厂固件: TP-LINK TL-WR802N v1 TP-LINK TL-WR841N v9 (国际版) [u-boot-qca9558-ar8236.bin] 硬件配置: QCA9558 + AR8236 内存: SDRAM / DDR / DDR2 16-bit 大小自适应 机型: TP-LINK TL-WR941N v7 TP-LINK TL-WR881N v1 TP-LINK TL-WR2041N v2 迅捷 FW450R v1 水星 MW450R v1 原厂固件: 同机型支持的固件 [u-boot-qca9558-ar8327n.bin] 硬件配置: QCA9558 + AR8327N 内存: SDRAM / DDR / DDR2 16-bit 大小自适应 机型: TP-LINK Archer C5 TP-LINK Archer C7 v1/v2 TP-LINK TL-WDR4900 TP-LINK TL-WDR7500 v2 TP-LINK TL-WDR7500 v3 TP-LINK TL-WR1043N v2 原厂固件: 同机型支持的固件 [u-boot-tp9343.bin] 硬件配置: TP9343 内存: SDRAM / DDR / DDR2 16-bit 大小自适应 机型: TP-LINK TL-WR880N v3 TP-LINK TL-WR882N v1 TP-LINK TL-WR885N v1 TP-LINK TL-WR941N v8 TP-LINK TL-WR2041N v3 迅捷 FW450R V2 原厂固件: 无 U-Boot 支持的 Flash 列表及说明: 制造商 4M 8M 16M 32M Atmel AT25DF321 AT25DF321A AT25DF641 EN25Q128 EN25QH256 EON (cFeon) EN25F32 EN25P64 EN25QH128 EN25P32 EN25Q64 EN25Q32 EN25QH64 EN25QH32 ESMT F25L32PA F25L64QA F25L32QA GigaDevice GD25Q32 GD25Q64 GD25Q128 Macronix MX25L3205D MX25L6405D MX25L12805D MX25L3235E MX25L6435E MX25L12835E MX25L25635E MX25L3255E MX25L6455E MX25L12855E MX25L25655E Micron M25P32 M25P64 M25P128 N25Q256A M25PX32 M25PX64 N25Q128A13 N25Q032A N25Q064A N25Q128A11 PMC PM25LQ032 SST SST25VF032B SST25VF064C SST26VF032 SST26VF064B SST26VF032B Spansion S25FL032A S25FL064A S25SL128P1 S25FL256S1 S25FL132K S25FL164K S25SL128S1 S25SL032K * S25SL064K ** S25SL128K *** Winbond W25X32 W25X64 W25Q128 W25Q256 W25Q32 W25Q64 * S25SL032K 被识别为 W25Q32 ** S25SL064K 被识别为 W25Q64 *** S25SL128K 被识别为 W25Q128

6,125

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 硬件设计
社区管理员
  • 硬件设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧