是否可以创建支持多个不同微控制器的 PIC 固件二进制文件?

Posted

技术标签:

【中文标题】是否可以创建支持多个不同微控制器的 PIC 固件二进制文件?【英文标题】:Is it possible to create a PIC firmware binary that supports multiple different microcontrollers? 【发布时间】:2022-01-19 13:47:11 【问题描述】:

由于当前芯片短缺,我不得不购买与最初设计规格不同的 PIC 微控制器。

首字母:PIC24FJ256GA606 修订版 1:PIC24FJ512GA606 修订版 2:PIC24FJ1024GA606

在这种情况下,微控制器属于同一个系列,但内存大小不同。

最初,创建二进制文件是为了支持多种产品变体,它们都使用这个微控制器(使用硬件引脚来定义产品的类型,从而定义它支持的软件功能)。我想继续使用单个二进制文件,但要能够支持上面指定的不同微控制器。

我们在制造过程中使用 PICKIT 4 闪存微控制器。 在制造过程中还会将自定义引导加载程序闪存到微控制器上,以允许固件更新过程由现场的另一个 PIC 微控制器驱动(它是通过 RS-485 连接的分布式系统)。

我使用 MPLAB X IDE 进行开发和构建生产二进制文件。

我想关键问题是这是否可能? 如果是这样,那么我将如何实现创建支持多个处理器的单个二进制文件?

【问题讨论】:

这是一个公平且写得很好的问题。我的猜测是最小映射的二进制应该适用于所有三个。值得测试。 我猜你总会遇到控制器不匹配的问题。所以编程器不会检测到正确的芯片,也不会启动——但是是的,这个问题很好。 如果只是内存大小的区别,为什么你认为二进制文件不能在更大的设备上运行? 【参考方案1】:

通常单个二进制文件应该只对应特定的控制器。因为尤其是 Microchip 的微控制器种类繁多。但正如您在问题中提到的那样:

在这种情况下,微控制器属于同一个系列,但内存大小不同。

您可以稍微使用相同的二进制文件,只要您非常仔细地选择硬件。我的意思是,如果这 3 种不同的型号具有相同的引脚映射,但有些型号较少或有些型号较多,那么您将尽可能为 I/O 功能选择通用的相应引脚。由于这些设备属于同一系列,因此它们必须具有具有相同端口和引脚编号的通用 IO 引脚。

如果这些相似之处(包括内部寄存器)足以满足您系统的功能,那么您可以为这 3 个或更多设备使用相同的二进制文件只要您非常仔细地选择正确的硬件并且在不触及硬件的情况下,所有功能都不会保留。

但是对于不属于同一个系列的其他人来说,很难说同样的话。在这种情况下,您可以检查系统每个功能的硬件相似性。如果那个微提供相同的硬件,那么你可以先尝试一下它是否会被编程,然后它会以相同的方式运行。在确保足够之后,您也可以将该模型添加到可用模型列表中。

希望这能给你一个有用的想法。

【讨论】:

【参考方案2】:

要让两个微控制器具有兼容的二进制文件,它们需要满足以下条件:

CPU 内核必须具有相同的指令集架构。请注意,制造商所说的“代码兼容”一词可能仅表示两个部件具有相同的 ISA 并且在汇编语言级别上兼容,只要不使用外围设备或内存... 如果它们具有不同的内存大小,则具有较大内存的部分必须是具有较小内存的部分的超集,并且它们必须将内存映射到相同的地址。 使用的所有硬件外设必须相同,使用的任何外设路由寄存器也必须相同。请注意,相同系列的相同内核但具有不同的封装和引脚布线可能意味着外设布线寄存器必须设置不同。 固件内部不能检查MCU零件号寄存器等,flash编程设备也不能检查。

一般来说,这意味着 MCU 必须属于同一系列,并且制造商必须保证它们是可更换的。

您很可能可以在同一型号的不同温度规格部件之间以及同一型号的汽车/非汽车质量部件之间切换,而无需更改代码。

【讨论】:

以上是关于是否可以创建支持多个不同微控制器的 PIC 固件二进制文件?的主要内容,如果未能解决你的问题,请参考以下文章

MicroPython基础知识总汇

蓝牙低功耗设备需要编写固件/驱动程序?

PIC单片机基础1

微控制器有哪些型别

我可以使用Visual Studio从多个微控制器读取数据吗?

CC2530微控制器与IAR开发环境