6.6. 为什么无法下载程序

有些时候,会出现编译后,无法将固件文件下载到设备中的情况。 可以通过下面的步骤来排除情况:

6.6.1. 下载脚本 download.bat 编码错误

Windows 运行bat批处理文件的时候,要求文件的编码是本地编码。中文系统一般就是gbk编码。 如果download.bat的编码是utf-8的时候,则会报类似不是内部或外部命令,也不是可运行的程序之类的错误,如下图:

这个时候,可以考虑通过Notepad++之类的工具将文件编码修改为gbk,或者把文件中的中文都去掉。这样就会相当于是ANSI编码的文件。

6.6.2. 设备不在线

检查 Code::Blocks 的 build log 日志,是否有Device Offline之类的报错,如下图所示:

如果有,则表明设备未连接电脑,或者设备未进入下载模式。可能有下面几种原因:

  1. 未正确插入样机、USB 线松动等,设备管理器中未能查看到(见下面的说明)

  2. 插入了错误的样机、芯片的型号不匹配。

Note

正确连接下载模式的设备后,我的电脑打开后,应当会多了一个隐藏磁盘(确认当前文件浏览器可以查看隐藏文件或设备)。

此外,【我的电脑】-【设备管理】-【磁盘驱动器】下,应该会有一个带有 br**uboot1.0bd**uboot1.0 或者 dv**uboot1.0 的磁盘设备。

更详细步骤,参考:升级与下载说明

如果设备管理器中已经有对应的设备,但是仍然有Device Offline的提示,依次尝试下面的方法:

  1. 尝试用管理员权限进行下载。即,用管理员权限打开 Code::Blocks,打开工程后再编译下载。 下载工具需要操作物理设备,有些情况下可能会被 Windows 拒绝。例如远程登录的情况下

  2. 确认电脑是否有安装杀毒软件、权限控制软件等,当前用户是否有允许操作 USB 设备的权限(下载工具需要读写 USB 设备,一些电脑为了安全保密可能被设置成了无法操作 USB 设备)。

  3. 如果上述都不行,尝试更换其它电脑。

6.6.2.1. 为什么有时候设备只能下载一次代码

一种常见的错误是,板子设计的时候,没有留烧录的脚。烧录过一次之后,固件会跑起来,就不在烧录状态了。 最常见的表现是:空片烧录正常,之后再也无法进入下载模式。 具体请联系代理商或者提供 SDK 的人,咨询板子应该如何设计,烧录脚如何设计。

6.6.3. KEY文件与芯片不匹配

提示key mismatch或者不匹配之类的错误。这个错误表示key文件和芯片不匹配。需要检查下载脚本download.bat中调用isd_download.exe的参数:

  • 如果芯片是空片,则下载时候无需指定-key xxxxx的参数,请移除。空片不需要添加 key 文件。

  • 如果芯片不是空片,则下载时需要指定对应的-key xxxxx,其中xxxxx就是和芯片匹配的key文件。这个文件需要找代理商获取

Note

如果确认芯片不是空片,而且下载的时候指定了 KEY 文件但是还是报不匹配错误。

这说明你指定的 KEY 文件和当前的芯片不匹配。 也就是说,这个芯片已经烧录了别的 key 文件(而不是你当前指定的这个 KEY 文件)。 可能是你拿到了被错误烧录的芯片,或者是你拿到了错误的 KEY 文件。

芯片与 KEY 文件必须一一对应,已经烧录过其它 KEY 的芯片的 KEY 不能被修改,也不能被其它 KEY 文件烧录

Important

注意,download.bat脚本,可能会引用别的 bat 脚本。所以建议整个 SDK 工程全局搜索 isd_download.exe 关键字。

Note

  1. 如果你的 KEY 文件名字中有空格。建议去掉空格。或者用双引号 “” 括起来,例如 “key file with space.key”。

  2. 为了防止问题,建议key文件名不要有任何空格。

6.6.4. USB 连线不稳或者 FLASH 损坏

提示 错误信息:ERR_CRCCMP。这个错误表示,在完成下载后,比对FLASH内容的时候,出现内容不匹配。如下图所示:

这个可能是:

  • 样机(设备)和电脑连接不稳定,导致偶现失败。可以考虑重新接稳USB连线后重试。

  • 样机(设备)的 FLASH 受到了损坏,导致部分区域无法正确写入。可以考虑更换样机(设备)后重试。

6.6.5. USB 连线不稳或者芯片本身损坏

提示 错误:分析设备信息失败。这个错误表示,解析设备信息的时候出错:

这个可能是:

  • 样机(设备)和电脑连接不稳定,导致偶现失败。可以考虑重新接稳USB连线后重试。

  • 样机(设备)芯片本身损坏,导致与 PC 工具通讯异常。

6.6.6. 未正确设置虚拟串口

提示打开设备(JLVirtualtagSerial)失败。这个错误表示无法打开虚拟串口设备。这个可能是因为没有设置虚拟串口。参考串口升级

6.6.7. 其它可能的原因

如果出现其它情况,可以尝试下面的步骤:

  • 更换电脑后,重新下载

  • 更换样机后,重新下载

这样来确定,不能下载的现象是与电脑还是与样机有关。