通过 FPGA 进行 PIC 编程

电器工程 图片 FPGA 程序员 引导加载程序 选择
2022-01-20 07:37:24

我想知道是否有一种方法可以通过 FPGA 卡首次对 PIC 进行编程(写入闪存)。

PIC 已经焊接到 FPGA 上,我无法移除它。PIC 上不存在引导加载程序。因此,我需要使用引导加载程序在 USART / SPI / I2C 模式下对其进行编程,以便它可以接收来自 FPGA 的数据。

我知道通常我必须拆焊它,将它连接到 PICKit 之类的硬件编程器上,然后用 MPLAB 之类的计算机上的软件对其进行编程,但我负担不起。

我可以使用 MPLAB 生成引导加载程序,这是一个 .hex 文件,但是如何将其传输到 FPGA,然后通过 FPGA 引脚传输到 PIC?

使用的 PIC 是 Microchip PIC12F1822。

2个回答

不,您不需要,事实上您不能,使用 SPI、UART 或 I 2 C 对 PIC 进行编程。新程序放入没有为此目的加载特殊代码(引导加载程序)的 PI​​C的唯一方法是使用外部硬件编程接口。在电气上,这意味着连接到 Vss、MCLR、PGC 和 PGD。将编程器也连接到 Vdd 可能很有用,但对于该芯片来说不是必需的,只要知道 Vdd 电平并相应地调整编程器即可。

底层硬件接口非常简单。PGD​​ 是数据线,在 PGC(时钟线)的下降沿由 PIC 采样。为了首先让 PIC 进入编程模式,一个特殊的 32 位密钥相对于 MCLR 上的特定边沿进行计时(尽管请参阅下面关于高压编程的注释)。

更高级别的协议变得更加复杂。大多数事情都是用 6 位命令完成的,其中一些命令后面是 14 位数据字。您必须仔细阅读编程规范。请注意,编程规范是独立于数据表的文档。转到 Microchip 网站上您特定 PIC 的产品页面,您会在文档部分找到指向编程规范的链接。

添加了关于高压编程

这类 PIC 有两种进入编程模式的方式,高压 (HVP) 和低压 (LVP)。高压方法需要将 MCLR 提高到 8 到 9 伏之间,并在编程期间保持该电压。无论编程到 PIC 中的任何可能数据如何,此方法始终有效。

进入编程模式的低电压方法首先将 MCLR 驱动为高电平,然后驱动为低电平,然后正常使用 PGC 和 PGD 以特殊的 32 位键序列计时。该器件将在正确的按键序列后进入编程模式,并且只要 MCLR 保持低电平,它将保持在编程模式。

可以通过配置位之一禁用低电压方法。但是,配置位的擦除状态允许低电压编程,出厂时采用这种方式,并且如果使用高压方法进入编程,该配置位只能设置为不允许 LVP。因此,要不启用 LVP,必须满足以下所有条件:

  1. PIC 上次使用支持 HVP 的编程器进行编程,并且使用了 HVP 程序进入模式。

  2. 编程到 PIC 中的 HEX 文件故意将配置字 2 中的 LVP 位设置为非擦除状态。

由于禁用 LVP 几乎需要经过深思熟虑的操作和正确的程序员,它很可能仍然可以启用。如果出于某种奇怪的原因故意禁用它,那么您必须在 MCLR 上提供 8-9 V 以使 PIC 进入编程模式至少足够长的时间以执行批量擦除(重新启用 LVP)。

对 PIC 进行编程需要高电压。是的,可以将 PIC 切换到“LVP”或低压编程模式,但您需要一个高压编程器才能做到这一点。

如果您的 PIC 已经进入 LVP 模式,那么可以,您可以轻松地从 FPGA 对 PIC 进行编程。数据表都包含对芯片进行编程所需的编程波形,因此可以在 FPGA 中构建您自己的 PIC 编程器设备。

但是,如果 PIC 尚未进入 LVP 模式,则需要产生一个高电压(通常为 10V)并在正确的时间将其施加到 MCLR 引脚以进入编程模式。如果您的板上还没有这种硬件,那么它将需要额外的硬件,最终由 FPGA 控制何时触发。

大多数 PIC 编程器包括一个小型升压稳压器(倍压器),使用板载 PIC 将提供的 5V 电压提高到 10V 以管理电压调节。他们经常使用来自 PIC 的 PWM 和 PIC 上的 ADC 输入作为简单的升压调节器。

您应该查看公开可用的 PICkit2 原理图。