为什么我们需要硬件程序员?

电器工程 Arduino 微控制器 粗鲁的 网络服务商
2022-01-23 05:29:53

我使用Boarduino和 30 排面包板对我的 ATtiny 进行编程。我加载了一个名为ArduinoISP的不太复杂的草图(现在默认包含在 Arduino IDE 中),突然间我有了一个工作程序员。Atmel 以30 到 40 美元的价格出售一个不错的编程器,并且有很多工具包可以制作更便宜的工具包。

一旦我找到了我的工作程序员并让微小的闪烁变成了一些 LED,我感到非常高兴。然而,现在我可怜的 boarduino 被困在程序员的职责上。

据我所知,这个程序员按住复位按钮,然后在 MOSI 和 MISO 引脚上发送和接收。 我认为 SCK 未使用或至少不需要。 (根据 ATtiny 数据表需要 SCK,我的程序员没有它就无法工作,而且我找不到我认为不需要的地方。)

为什么我需要一个硬件编程器来传输串口?我的意思是,假设我愿意用手指按住复位按钮而不是使用 IC。剩下的就是串行发送和接收,所以我只需要三根线 GND、RXD 和 TXD。哎呀,如果我有“DTR”线或其他什么,你甚至可以用串行电缆按住重置按钮。

为什么所有这些硬件解决方案需要花哨的软件(如 AVRdude 或 AVR studio 或其他)?

我的意思是我可以理解将微控制器呈现为大容量存储设备并让您将二进制文件拖过来进行编程的小型 USB 电缆(例如这个 ARM 开发板)。仅硬件,使用标准软件驱动程序。

我还可以理解一个纯软件的解决方案(从 USB 到芯片的模数挂钩,使用类似 FTDI 芯片的东西来简化电线的连接)。所有花哨的编程协议都将由计算机上的软件处理,而硬件只是一些电线。

为什么我们同时涉及(复杂的)软件和硬件?我的意思是,据我所知,对微控制器进行编程非常容易,但是当我刚开始学习时,我真的很担心我将如何从 mouser 或 digikey 购买芯片,而无需支付一些专家来编程引导加载程序为了我。

我确信有一个很好的理由(这不像我已经编写了软件或开始制造拖放式 USB 编程器),但作为一个新手,我不知道它是什么。

4个回答

你是对的,编程 AVR 非常简单。它只是在 SPI 之上实现的自定义协议,在低电压下运行。需要 SCK。

但是,对较旧的 PIC 进行编程(和非 ISP AVR 编程)需要高电压和不同的自定义协议。这需要一个特殊的硬件编程器。

其他设备更复杂。大多数 ARM 微控制器必须通过 JTAG 进行编程,这里直接写入内存,并指示处理器写入闪存。同样,每个设备都是不同的。

我做了很多研究并准备开始玩 AVR,但我从未真正使用过 AVR,所以这可能是错误的,但是:

大多数廉价编程器不支持 AVR 高压编程。如果使用熔丝位将控制器设置为不可编程,或者您以某种方式制造了一些严重的错误并需要将其重置为默认值等,则需要它。

大多数便宜的 AVR 编程器只是用复位线同步串行接口。您可以使用 FT232 对串行外设接口 (SPI) 进行 bitbang。FT232 专为异步串行而不是同步而设计,因此全部在软件中完成。

您可以只上传像arduino这样的引导加载程序,它允许您在正常模式下使用ft232通过异步串行接口上​​传代码,或根据需要使用电平转换器的任何异步串行接口上​​传代码。只是不要忘记为您的时钟速度使用正确的引导加载程序并正确设置熔丝字节。

许多可编程设备在历史上都要求使用相对精确定时的信号序列对其进行编程。在许多情况下,如果只想对一种特定类型的设备进行编程,所需的硬件会非常简单,但由于不同的设备有不同的要求,因此构建一个更通用的编程器就有些困难了。

今天,一个人可能只使用 USB I/O 电缆和 PC 软件就可以对超过 50% 的可编程设备进行编程,但“硬件”编程器仍然具有相当大的速度优势。PC 对 USB 设备接收到的信号做出反应并发送响应通常至少需要 1-2 毫秒。如果一个编程序列需要反复询问设备何时准备好接收下一个数据块然后发送它,那么使用简单的 I/O 电缆将在处理每个数据块所需的时间上增加一到两毫秒。根据所讨论设备的性质,与编程器相比,编程所需的总时间可能会增加一个数量级,编程器可以在等待设备准备好时被告知,一旦它准备好应该做什么。

就个人而言,我喜欢让配备闪存的设备出厂时带有内存中的引导加载程序的方法,该引导加载程序可以与最少的编程硬件一起使用。如果器件支持在软件控制下的闪存编程,那么这种方法可以简化生产,而不会增加任何硅成本,除了在完成所有其他操作后将工厂测试夹具程序放入引导加载程序所需的非常短的边际时间之外.