在学校,我为 8051 兼容 CPU 编写了许多程序。但我从未真正了解我们的“调试”集是如何工作的。我的意思是,我们在特殊集中测试我们的程序,这实际上允许您通过 PC 串行端口非常简单地将程序加载到 CPU。但我认为你比我更了解这一点。
但它是如何工作的呢?我的意思是,我知道有一种芯片可以将信号电平从 PC 串行端口调整为 TTL 逻辑,然后连接到 8051 的串行线。但我所知道的就这些了。实际上,甚至我的老师也不知道它是如何工作的,因为学校购买了所有东西。
因此,我怀疑 8051 中已经运行了一些程序,这些程序处理通信并将您的程序存储到内存中,对吗?但是,您如何让 8051 处理来自 ROM 以外位置的指令?因为如果我是对的,您无法通过任何指令写入 ROM 内存,而且 8051 只能从 ROM 读取指令?
答案1
现代哈佛架构 MCU 使用板载闪存来存储固件,因此尽管它被称为只读存储器,它实际上并不是只读的。根据8051 的维基百科文章,现代基于 8051 的微控制器通常包括:
内置复位定时器,带掉电检测功能,片上振荡器,自编程 Flash ROM 程序存储器,ROM 中的引导加载程序代码,EEPROM 非易失性数据存储、I²C、SPI 和 USB 主机接口、CAN 或 LIN 总线、PWM 发生器、模拟比较器、A/D 和 D/A 转换器、RTC、额外的计数器和计时器、在线调试设施、更多中断源以及额外的省电模式。
8051 还具有板载 UART 提供串行端口。我已经有一段时间没有使用嵌入式设备了,但我记得——我使用过 PIC 微处理器,因此这可能与您的 8051 的做法不完全一样:
- 在启动时,MCU 从特定的 ROM 位置加载引导加载程序代码。
- 许多常见的引导加载程序将等待几秒钟,检查串行端口是否有特定信号。
- 如果您已将调试板连接到计算机的串行端口,则可以发送该信号(使用 Hyperterm 或 Minicom 等终端程序,或使用专用固件加载程序)。
- 接收到该信号后,MCU 的引导加载程序代码会将电路板置于编程模式,然后您就可以发送新的固件。
- 如果 MCU 没有收到信号,它将继续正常启动到程序存储器中已加载的固件。
某些微控制器上的“编程模式”涉及使用更高的电压来编程 EEPROM 内存,但并非所有微控制器都需要这样做。
有关具体细节,请参阅 MCU 的数据表(通常可从制造商的网站获取)。Stack Exchange 网站芯片黑客致力于 DIY 嵌入式电子产品,是解答进一步疑问的好地方。
答案2
是的,ROM 实际上是 EEPROM 或闪存。所以它是可读写的。此外,您的演示板可以有外部存储库来存储程序,以及引导加载程序来运行存储的程序并处理 PC 通信以允许您上传新程序。