health 发表于 2024-9-24 17:24:02

建议增加PIO(Programmable I/O)外设

    单片机上已有的各种硬件接口,例如UART,SPI,I2C等,CPU软件只需读写它们的相关接口寄存器,硬件即可产生其特有的时序完成操作。对于不常见的或新设计的接口,可由软件操作GPIO实现,但是这要占用大量的CPU时间。其中夹杂着各种us级延时和等待,影响其它任务的执行。
    对于这种简单的非标接口,外接FPGA虽功能上可实现,但就是太大材小用了。如果MCU内集成一块小规模的FPGA,我认为对MCU厂家来说硬件上应该没啥问题,就是开发不太方便,毕竟FPGA的开发工具和软件的编译器原理不太一样,做一套简单易用的FPGA开发工具应该不容易。
    采用可编程IO是更好的选择,简单高速的协处理器来实现灵活的接口。主处理器只需读写接口FIFO即可。常见的几类MCU很多都有类似的功能,例如树莓派RP2040的PIO(Programmable I/O),早期常用的USB2.0高速MCU CY7C68013A的GPIF,ESP32上的ULP(Ultra-Low-Power coprocessor 超低功耗处理器),WCH的PIOC等。有些是简单的状态机,有些是精简的RSIC-V内核。通过简单的几条指令编程实现需要的接口,便于上手。

灵活性
可编程实现各种接口,例如1-wire,PWM,各种遥控编解码等,也可以实现UART,SPI这类标准接口以弥补原生数量的不足。

高速
可采用高于主CPU的时钟频率,不经过CPU达到较高的数据传输速度。例如开源项目RP2040逻辑分析仪,低价逻辑分析仪CY7C68013A,都是由可编程IO直接采样引脚存入内存,再经USB传输至上位机。

解放主CPU
有些种类接口虽然速度不高,但是需要各种延时和等待,红外或无线遥控信号空闲时充斥着各种杂波,用主CPU来处理会严重拖累整个系统。例如ESP32开源项目FabGl就采用ULP内核来处理与PS2接口鼠标和键盘通讯。

低功耗
主CPU休眠时,用来处理低速任务,对数据和事件初步处理和筛选,有必要时才唤醒主CPU。

周期固定
高速CPU通常采用指令CACHE,分支预测等技术来提高执行速度,但是这也导致了指令周期不固定。这种情况用CPU指令来延时应该不可靠。简单的协处理器每个指令周期都是固定的,延时也方便。
----------------------------------------------------------------------------
最近看STC上搞WS2812的比较火热,我觉得每当有一种需求就设计一个硬件接口,不如直接搞成PIO更灵活。时钟就像现在的HSPWM,HSSPI,TFPU那样,独立于主CPU采用高主频,通过编程灵活实现多种接口,以后再有新的需求也不用改硬件。
可以参考RP2040的说明。

springvirus 发表于 2024-9-24 19:34:22

分析的不错!!

jwd 发表于 2024-9-24 20:02:45

{:4_250:}

晓飛飛 发表于 2024-9-24 22:31:34

1-wire和ws2812这些做成硬件接口其实非常容易,但在MCU领域这些接口不算是通用接口,没必要为这个大费周章
搞双核或者异构目前开来难度还比较大,因为主MCU自身需要提升的地方还有很多,可以看看下图中主流的MCU目前都支持些什么功能,个人建议先把这些进度赶上来,再考虑后面的比较好一点。


晓飛飛 发表于 2024-9-24 22:37:49

既然锚定扎根AI领域发展,那就得考虑逐步增加与AI相关的一些外设,比如加密单元、随机数发生器、之前的系列增加了硬件CRC单元就算是一种进步,但和AI领域的各种高级加密算法相比还是有一定的距离,而这些是将来需要跟上的内容。而基于IO操作的一些,不妨借鉴合泰,出一些低成本专用系列,比如点灯系列,电机系列,智能充电器系列,人机HMI系列等等,对于一款通用的MCU来说,通用外设接口的提升才是重点也是中心。
页: [1]
查看完整版本: 建议增加PIO(Programmable I/O)外设