惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

I
Intezer
V
Vulnerabilities – Threatpost
Google Online Security Blog
Google Online Security Blog
T
The Exploit Database - CXSecurity.com
C
CXSECURITY Database RSS Feed - CXSecurity.com
AWS News Blog
AWS News Blog
G
GRAHAM CLULEY
P
Privacy & Cybersecurity Law Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
C
Cybersecurity and Infrastructure Security Agency CISA
N
News | PayPal Newsroom
T
Tenable Blog
Spread Privacy
Spread Privacy
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
S
Secure Thoughts
P
Privacy International News Feed
IT之家
IT之家
Project Zero
Project Zero
T
The Blog of Author Tim Ferriss
Engineering at Meta
Engineering at Meta
大猫的无限游戏
大猫的无限游戏
博客园_首页
GbyAI
GbyAI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
量子位
雷峰网
雷峰网
Apple Machine Learning Research
Apple Machine Learning Research
Hacker News: Ask HN
Hacker News: Ask HN
Google DeepMind News
Google DeepMind News
MongoDB | Blog
MongoDB | Blog
N
Netflix TechBlog - Medium
Martin Fowler
Martin Fowler
NISL@THU
NISL@THU
I
InfoQ
D
DataBreaches.Net
有赞技术团队
有赞技术团队
K
Kaspersky official blog
Security Latest
Security Latest
The Register - Security
The Register - Security
Hugging Face - Blog
Hugging Face - Blog
S
Security @ Cisco Blogs
P
Proofpoint News Feed
M
MIT News - Artificial intelligence
H
Hackread – Cybersecurity News, Data Breaches, AI and More
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
AI
AI
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
Security Archives - TechRepublic
Security Archives - TechRepublic
N
News and Events Feed by Topic

AirTerminal – Blanboom

AirTerminal 2.2:Telnet 服务器、自动重连 AirTerminal 2.1:自定义字体、颜色主题、退格键映射 AirTerminal 2.0:支持连接多个蓝牙设备 AirTerminal 1.4 更新:自定义换行符,隐藏没有名称的设备 AirTerminal 1.3 更新:日志记录、改用 SwiftTerm AirTerminal 1.2 更新:XMODEM 文件传输、自定义终端工作模式 [iOS] AirTerminal: 用于 Raspberry Pi 等嵌入式设备的蓝牙终端
Arduino Bootloader 程序下载协议
greatcat · 2019-02-12 · via AirTerminal – Blanboom

单片机通常通过编程器来下载程序。而 Arduino 中有一小段 bootloader 程序,在复位的时候运行,可以通过串口接收程序并写入单片机,因此可以不使用额外的编程器,直接通过串口下载程序。

前段时间,在为 AirTerminal 增加 XMODEM 协议的支持后,打算在下一个版本增加 Arduino 程序下载功能。所以先提前了解一下 Arduino Bootloader 使用的程序下载协议,并通过本文整理相关知识。

文章仅提供了解这些协议所需要的链接,对于协议的具体内容不再过多描述。文章内容将会根据自己的进一步了解不断更新。

Arduino 程序编译后的 HEX 文件,能被 Vim 正确识别并进行语法高亮
Arduino 程序编译生成的 HEX 文件,能被 Vim 正确识别并进行语法高亮

目录

1 HEX 文件格式

1.1 基础知识

1.2 代码参考

1.3 扩展阅读

2 Arduino Bootloader 使用的协议:STK500

2.1 基础知识

2.2 代码参考

2.3 扩展阅读

HEX 文件格式

基础知识

大部分单片机都可以将编译好的程序以 .hex 文件的形式保存,对于 Arduino,也可以方便地获取编译后生成的 hex 文件

原先以为与 ELF 这种稍微复杂的格式相比,HEX 文件较为简单,只是将 flash/eeprom 里面的内容进行原封不动地保存在文件中。现在经过了解,才知道 HEX 文件也是有自己固定的格式的。

HEX 文件里的内容为 ASCII 字符(而不是二进制),其中包含地址、数据、校验码等信息。如下三篇文章,对 HEX 文件的格式做了详细的描述:

代码参考

扩展阅读

在查阅资料的时候,找到了这篇关于 vim 的文章。作者从 vim 正确识别并高亮 HEX 文件开始,讲到了 vim 的历史。虽然文章与 HEX 文件的格式没有太多关系,但文章内容还是值得阅读的(这个网站中也有不少介绍计算机历史的文章,推荐阅读):

Arduino Bootloader 使用的协议:STK500

基础知识

Arduino Bootloader 使用 Atmel(现已被 Microchip 收购)的 STK500 协议进行文件下载。协议数据格式基本上是一个字节的命令 + 数据 + 0x20。其官方文档如下:

想初步了解 STK500 协议的基础知识,可以从 optiboot 的文档入手:

代码参考

具体的代码可以参考 optiboot。Optiboot 是 Arduino Bootloader 的一个实现(2018 年后,Arduino 的默认 Bootloader 就是 optiboot),其代码中实现了 STK500 协议下载程序所必需的指令:

对于电脑侧向 Arduino 发送数据的程序,除了 AVRDUDE,还可以参考如下代码:

扩展阅读

关于 Arduino Bootloader,其他有用的链接: