跳转至内容

Mizar32/刷写固件

来自维基教科书,开放世界中的开放书籍

刷写固件镜像

[编辑 | 编辑源代码]

有几种方法可以将新的固件镜像写入 Mizar32。

== 使用 USB DFU 引导加载程序 ==

Mizar32 闪存的前 8KB 预先编程了 Atmel 的 USB DFU 引导加载程序,它能够写入闪存的其余部分。要与它通信,可以使用 Atmel 的闭源 'flip' 和 'batchisp3' 工具,它们很糟糕,或者可以使用开源 'dfu-programmer',它还算可以。

使用 dfu-programmer

[编辑 | 编辑源代码]

dfu-programmer 是一个开源程序,用于与 USB DFU 引导加载程序通信。它包含在 Debian 和 Ubuntu 中,安装步骤如下(以 root 身份):

apt-get install dfu-programmer

获取固件

wget http://simplemachines.it/files/mizar32-firmware-latest.tgz
tar xfz mizar32-firmware-*.tgz
cd mizar32-firmware-*

现在

  • 使用 USB 线将 Mizar32 连接到您的电脑
  • 在按住用户按钮 (SW2) 的情况下,给 Mizar32 通电(或按下它的复位按钮)
  • 在电脑上,发出以下命令
sh program-128.sh    # If you have the Mizar32 model C

sh program-256.sh    # For Mizar32 model A of B for the integer firmware

sh program-256fp.sh  # For Mizar32 model A of B for floating point firmware

如果它显示 dfu-programmer: no device present.,请尝试以 root 身份运行它。如果是这样,并且您希望任何人都能够运行它,您可以以 root 身份执行以下操作

chown root $(which dfu-programmer)
chmod 4755 $(which dfu-programmer)

但这会打开一个安全漏洞,因此,如果您的系统中可能存在恶意用户登录,最好将自己添加到 /etc/group 中的 "admin" 组中,然后执行以下操作

chown root:admin $(which dfu-programmer)
chmod 4750 $(which dfu-programmer)

请注意,Debian/Ubuntu 程序 "dfutool"(包含在 "bluez" 包中)是完全不同的东西。

dfu-programmer 旧版本的 Bug

[编辑 | 编辑源代码]

dfu-programmer v0.5.1 中存在一个 bug,它偶尔会错误地编程闪存。症状是

$ dfu-programmer at32uc3a0256 flash elua_lualong_at32uc3a0256.hex
Validating...
Image did not validate.

该 bug 在 dfu-programmer-0.5.2 及更高版本中已修复。

好像还不够,Mizar32A 采用了具有 512KB 闪存的汽车级超强 AT32UC3A 芯片,它比dfu-programmer预期的擦除闪存时间要长几秒(约 14 秒而不是 10 秒)。这使得program-256.sh固件分发中的脚本失败,因为它尝试在擦除完成之前开始编程芯片。解决方法是在 program-256.sh 脚本中添加一行

  echo Erasing...
  dfu-programmer at32uc3a0256 erase
+ sleep 5
  echo Programming...
  dfu-programmer at32uc3a0256 flash elua_lualong_at32uc3a0256.hex

这在 dfu-programmer-0.5.5 及更高版本中已修复,但 Debian 和 Ubuntu 仍然是 0.5.4。您可以通过以下方式检查已安装 dfu-programmer 的版本

dfu-programmer --version 2>&1 | head -1

您可以通过从源代码编译来安装更新版本

apt-get install libusb-dev build-essential
# Visit http://sourceforge.net/projects/dfu-programmer/files/latest/download
# and save the file it gives to your browser
tar xfz dfu-programmer-*.tar.gz
cd dfu-programmer-*
./configure
make
sudo make install                     # Installs under /usr/local
sudo apt-get purge dfu-programmer     # Remove the old version

进一步阅读

[编辑 | 编辑源代码]

使用 batchisp3

[编辑 | 编辑源代码]

Atmel 发布了与 USB DFU 引导加载程序通信的闭源程序:图形化的 "flip" 和命令行的 "batchisp3"。它们质量都很差,目前只有第二个工具适用于 AT32UC3 部件。

请注意,Debian/Ubuntu 包 "flip" 是完全不同的东西。

在 Ubuntu 上的安装(以 root 身份)如下(改编自 eLua 的 AVR32 平台信息

apt-get install openjdk-6-jre
cd /usr/local
wget http://www.atmel.com/dyn/resources/prod_documents/flip_linux_3-2-1.tgz
tar xfz flip_linux_3-2-1.tgz
rm flip_linux_3-2-1.tgz

cat > bin/batchisp3 << \EOF
#! /bin/sh
FLIP_HOME=/usr/local/flip.3.2.1/bin
JAVA_HOME=/usr/lib/jvm/java-6-openjdk/jre
USB_DEVFS_PATH=/dev/bus/usb
export FLIP_HOME JAVA_HOME USB_DEVFS_PATH
exec /usr/local/flip.3.2.1/bin/batchisp3.sh "$@"
EOF

chmod 755 bin/batchisp3

(在 Red Hat 系统上,USB_DEVFS_PATH 运行应该省略)。

要使 flip 正常工作,首先必须 cd /usr/local/flip.3.2.1/bin,并且它还不支持 AT32UC3 部件,因此我们只能使用命令行 batchisp3 程序

  • 使用 USB 线将 Mizar32 连接到您的电脑
  • 给 Mizar32 通电(或按下它的复位按钮)时,按住用户按钮 (SW2)。
  • 在电脑上,发出以下命令
 batchisp3 -hardware usb -device at32uc3a0128 -operation erase f memory flash blankcheck loadbuffer $PWD/elua_lualong_at32uc3a0128.elf program verify start reset 0

请注意,您必须显式提供固件文件的完整路径名(这里使用 $PWD/ 技巧)。否则,它会在 /usr/local/flip.3.2.1/bin/ 中查找固件文件。

进一步阅读

  • Atmel USB DFU 引导加载程序数据手册 链接
  • FLIP 主页 链接

在 Windows Vista/7 32 位系统下使用 Batchisp

[编辑 | 编辑源代码]
  • 从 Atmel 的网站下载适用于 Windows 的最新版本的 FlipBATCHISP.EXE 包含在 Flip 安装程序中),并按照安装说明进行操作。目前,只有 Batchisp 支持 AT32UC3A 微处理器,而 Flip 尚未支持,因此您必须安装 Flip,但不能使用它。
  • 激活 DFU 引导加载程序:使用 USB 线将 Mizar32 连接到您的电脑,连接电源插头,然后按住复位按钮并按住用户按钮 (SW2),然后释放复位按钮,最后释放用户按钮。
  • 转到 Windows 控制面板,右键单击“计算机” → “属性” → “设备管理器” → 右键单击 'AT32UC3A DFU' → “更新驱动程序软件” → “浏览我的电脑以查找驱动程序软件”,然后选择 Flip\usb 路径(这里为 c:\Program Files (x86)\Atmel\Flip 3.4.3\usb\),然后单击“确定”。现在 Windows 会告诉您“Windows 无法验证此驱动程序软件的发布者”,单击“无论如何安装此软件”。现在您已安装了 Mizar32 的 Batchisp 驱动程序。
  • 打开 Windows 命令提示符:开始 → 在“搜索命令和文件”中键入 'cmd' → 右键单击 cmd.exe → 以管理员身份运行。键入 'PATH',然后键入您 Batchisp.exe 目录的完整路径;在我们的机器上,该命令是
PATH c:\Program File (x86)\Atmel\Flip 3.4.3\bin 
  • 重新启动 Windows。现在 Windows 能够找到 Batchisp.exe 程序
  • 下载 [1] 并将此文件解压缩到某个目录中。运行您的 Windows 命令提示符:开始 → 在“搜索命令和文件”中键入 'cmd' → 右键单击 cmd.exe → 以管理员身份运行。键入以下命令(此命令区分大小写)
batchisp -device at32uc3aXXXX -hardware usb -operation erase f memory flash blankcheck loadbuffer \Mizar32_firmware_directory\elua_lualong_at32uc3aXXXX.elf program verify start reset 0

其中

  • at32uc3aXXXX 是您的 Atmel 设备,可以是:at32uc3a0128at32uc3a0256at32uc3a0512
  • \Mizar32_firmware_directory\ 是存储 Mizar32 固件的完整路径。
  • elua_lualong_at32uc3aXXXX.elf 是固件版本。

例如,您可以使用以下命令行刷写 Mizar32 B(256Kb 版本)

batchisp -device at32uc3a0256 -hardware usb -operation erase f memory flash blankcheck loadbuffer C:\Users\Simplemachines\Desktop\project\elua_firmware\0256\elua_lualong_at32uc3a0256.elf program verify start reset 0

如果 batchisp 无法运行,因为“缺少 MSVCR71.dll”

  • 将文件 msvcr71.dll 下载到您的 Flip\bin 目录(在此电脑上为 c:\Program Files (x86)\Atmel\Flip 3.4.3\bin\
  • 重新键入上面的 batchisp 命令以更新 Mizar32 固件。

进一步阅读

  • Atmel USB DFU 引导加载程序数据手册 链接
  • FLIP 主页 链接

请将有关此过程的任何反馈或建议报告给 [email protected]

在 Windows Vista/7 64 位系统下使用 Batchisp

[编辑 | 编辑源代码]
  • 从 Atmel 网站下载适用于 Windows 的最新版本的 Flip(Batchisp.exe 包含在 Flip 安装程序中)。按照视频安装说明进行操作。目前,只有 Batchisp 支持 AT32UC3A 微处理器;Flip 尚未支持,因此您必须安装 Flip,但不能使用它。
  • 下载并解压缩此 USB 驱动程序,因为 Atmel 的原始驱动程序未签名,Windows Vista/7 64 位不允许您安装未签名的驱动程序。将下载的 .zip 文件解压缩到 Flip\usb 文件夹中;在我们的机器上,该文件夹为
c:\Program Files (x86)\Atmel\Flip 3.4.3\usb 
  • 激活 DFU 引导加载程序:使用 USB 线将 Mizar32 连接到您的电脑,连接电源插头,然后按住复位按钮并按住用户按钮 (SW2),然后释放复位按钮,最后释放用户按钮。
  • 使用以下方法转到 Windows 控制面板:右键单击“计算机” → “属性” → “设备管理器” → 右键单击 'AT32UC3A DFU' → “更新驱动程序软件” → “浏览我的电脑以查找驱动程序软件”,然后选择您复制新签名 USB 驱动程序的路径(在此机器上为 c:\Program Files (x86)\Atmel\Flip 3.4.3\usb\atmel-flip-3.4.2-signed-driver),然后单击“确定”。现在您已安装了 Mizar32 的 Batchisp 驱动程序。
  • 打开您的 Windows 命令提示符:开始 → 在“搜索命令和文件”中键入 'cmd' → 右键单击 cmd.exe → 以管理员身份运行。键入 'Path',然后键入您 Batchisp.exe 目录的完整路径;在我们的机器上,该命令是

Path c:\Program File (x86)\Atmel\Flip 3.4.3\bin

  • 重启 Windows。现在 Windows 能够找到 Batchisp.exe 程序。
  • 下载 [2] 并解压该文件,然后运行 Windows 命令行:开始 --> 在“搜索命令和文件”中输入“cmd” --> 右键单击 cmd.exe --> 以管理员身份运行,然后输入以下命令(该命令区分大小写)
batchisp -device at32uc3aXXXX -hardware usb -operation erase f memory flash blankcheck loadbuffer \Mizar32_firmware_directory\elua_lualong_at32uc3aXXXX.elf program verify start reset 0

其中

  • at32uc3aXXXX 是您的 Atmel 设备,可以是:at32uc3a0128、at32uc3a0256、at32uc3a0512。
  • \Mizar32_firmware_directory\ 是存储 Mizar32 固件的完整路径。
  • elua_lualong_at32uc3aXXXX.elf 是固件文件版本。

我们使用以下命令行将 Mizar32 B(256KB 版本)刷写到设备上

batchisp -device at32uc3a0256 -hardware usb -operation erase f memory flash blankcheck loadbuffer C:Users\Simplemachines\Desktop\project\elua_firmware\0256\elua_lualong_at32uc3a0256.elf program verify start reset 0

进一步阅读

'粗体文本文本

使用 JTAG 编程器

[编辑 | 编辑源代码]

JTAG 编程器是一个设备,它允许您执行比 USB DFU 引导加载程序更多操作,包括更新 USB DFU 引导加载程序本身,并且需要您 PC 上的专用软件来驱动它。

如果您需要执行此操作,请联系 [email protected]

华夏公益教科书