PMS150C编程实战:3美分Padauk微控制器开发全攻略
PMS150C 是来自 逐高电子 的超低成本单片机,售价仅 3美分,却拥有完整的一次性可编程(OTP)ROM。本文将详细记录如何为这款芯片添加编程器支持,从读取ID、读写ROM到烧录LED闪烁程序,一步步带你进入 低成本MCU开发 的世界。无论你是电子爱好者还是嵌入式工程师,都能从中获得实用的技术细节。
为了让这枚“3美分微控制器”PMS150C也能被编程,我决定为编程器添加相应功能。以下是完整的实现过程。
一、为PMS150C添加编程功能
1. 读取芯片ID —— 确认通信正常
首先,我们需要验证编程器与PMS150C的通信是否正常。通过发送特定的命令,芯片会返回一个唯一的ID。代码如下:
setVppVoltage(5.0); // Power ON
delay(5);
setVddVoltage(3.0);
delay(5);
sendData(0xA5A5A5A7,32); // send write command
receiveData( &data , 26+12 ); // receive id
setVppVoltage(0.0); // Power OFF
setVddVoltage(0.0);
对于PMS150C,发送写入命令后,经过26个时钟周期,会返回12位的ID。实际运行后,从微控制器收到了 0xA16 的返回值。

成功读取到了ID,证明硬件连接和基础通信已就绪。
2. 从ROM读取数据 —— 验证读操作
接下来,编写读取ROM数据的程序。这一步可以确保我们能够正确读取芯片内部的内容,包括校准数据和用户程序。
setVppVoltage(5); // Power ON
delay(5);
setVddVoltage(2.5);
delay(5);
sendData(0xA5A5A5A6,32); // send read command
sendData(address, 12); // send address
receiveData( &data , 13 ); // receive data
setVppVoltage(0.0); // Power OFF
setVddVoltage(0.0);
读取操作的流程是:发送读取命令 → 发送12位地址 → 接收13位数据。由于芯片是空的,读回了 0x1FFF。

在ROM的末尾地址(如 0x3F6、0x3FFC、0x3FFF)发现了一些预写入的数据,这可能也是校准值。

这验证了从ROM读取数据的功能是正常的,为后续编程打下了基础。
3. 写入一次性ROM(OTP)—— 核心烧录步骤
写入操作稍微复杂一些,所需的电压也比读取时更高,且需要特殊的时序。PMS150C是OTP(一次性可编程)器件,写入后不可更改,因此务必谨慎操作。
setVppVoltage(8.0); // Power ON
delay(5);
setVddVoltage(4.3);
delay(5);
sendData(0xA5A5A5A7,32); // write read command
setVppVoltage(10.5);
delay(5);
setVddVoltage(5.8);
delay(5);
uint16_t data[] = {0x000, 0x001};
sendData(data[0], 13); // send data
sendData(data[1], 13);
sendData(address, 12); // send address
PCK_CLOCK();
PCK_UP();
PDA2_HIGH();
delayMicroseconds(30);
PDA2_LOW();
delayMicroseconds(30);
PCK_DOWN();
delayMicroseconds(4);
PCK_CLOCK();
setVppVoltage(0.0); // Power OFF
setVddVoltage(0.0);
写入流程详解:
- 发送
0xA5A5A5A7写入命令后,将VDD和VPP分别提高到 5.8V 和 10.5V(编程高压)。 - 以2个字为单位写入:连续发送2个字(13位/字)的数据,再发送要写入的起始地址(12位)。
- 发送一个时钟脉冲后,将
PDA引脚以30微秒为周期,进行8次开/关切换,这是关键的烧写脉冲。 - 最后再发送一个时钟脉冲完成本次写入。
验证结果:运行程序后,地址 0x000 和 0x001 成功写入了 0 和 1。

之后将所有地址写入与其地址相同的值,全部成功。

至此,PMS150C的编程功能已成功实现。现在我们可以像使用普通MCU一样,为它编写程序了。
二、实战:为PMS150C编写LED闪烁程序
有了基础的读写能力,接下来我们编写一个经典的LED闪烁程序,验证整个开发流程。我们将基于 PlatIO + EasyPDK 环境进行开发。
1. 创建项目并修改配置文件
基于之前为PFS154编写的项目进行修改。首先,修改 platio.ini,将开发板名称改为 PMS150C:
[env:development]
plat = https://github.com/1500WK1500/plat-padauk.git
board = PMS150C ; 关键:更改为PMS150C
framework = easypdk
extra_s = post:extra_.py
然后修改 main.c,注释掉第8行的 PDK_USE_FACTORY_IHRCR_16MHZ();,因为PMS150C没有内部高速振荡器的出厂校准值,系统会使用默认的IHRC时钟。其他部分保持不变:
#include
// ... 其他代码
void main() {
// PDK_USE_FACTORY_IHRCR_16MHZ(); // PMS150C无校准值,必须注释
PDK_SET_SYSCLOCK(SYSCLOCK_IHRC_16MHZ);
// ... 设置IO口、循环闪烁
}
保存并编译,生成HEX文件。
2. 烧录程序到PMS150C
将编译生成的HEX文件直接拖放到编程器的驱动器中(类似U盘烧录方式)。写入过程瞬间完成,无需额外操作。
3. 连接电池,见证奇迹
给微控制器连接上电池(或3V电源),LED开始有规律地闪烁!



至此,我们成功实现了对 3美分微控制器PMS150C的编程!现在,无论是10美分的Flash型PFS154,还是3美分的OTP型PMS150C,都可以用同一套工具链进行开发。这为超低成本嵌入式项目提供了更多选择。
三、下一步计划
目前所有测试均在面包板上完成,接下来计划将电路制作成PCB,形成更稳定的编程器或开发板,方便后续使用。
🎯 总结:PMS150C开发要点
- 芯片特性:3美分、OTP、IO电压2.5V~5.5V,适合超低成本消费电子、玩具、小家电等。
- 编程关键:需要高压(10.5V)和特殊时序,但借助开源工具可以轻松实现。
- 开发环境:PlatIO + EasyPDK 社区支持完善,与PFS154高度兼容。
- 注意事项:OTP芯片只能写入一次,务必在仿真或模拟器中充分验证代码。
👉 如果你也对低成本MCU开发感兴趣,欢迎尝试PMS150C,或者开发过程遇到难题
请联系逐高电子开发部 !
手 机:13926521299
Q Q: 2853516666
Email:sales11@zicoic.com
