ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

数控系统I/O扩展:I/O Link协议芯片与SPI从站设计避坑

数控系统I/O扩展:I/O Link协议芯片与SPI从站设计避坑

简介:A992D产品数据手册面向三菱、发那科数控系统I/O及I/OLink协议应用,服务于具备一定研发能力的硬件与嵌入式团队,帮助其解决协议芯片选型、地址资源匹配和外围电路设计缺少依据的问题。整包仅含1个PDF文件,约845KB,围绕A992D、F992D、M990D、F992A、M990A、A992A、A110A等适用型号,收录产品概述、参数列表、电气特性、静态电流、I/O工作电压、QFN封装信息、结构介绍、订货信息及引脚功能等章节。对应的核心芯片可自动适配基本或远程I/O地址控制,提供16×16、32×32、64×64、96×64、96×96等输入输出配置,最多3通道可选,用户层支持SPI,并具备体积小、电路设计简单、支持二次开发与个性化加密等特点。读者可据此完成方案评估、接口设计与器件选型,缩短研发周期并加快产品上市,已有258人学习。

1. 一颗从站芯片的定位:数控系统的 I/O 扩展为什么卡在协议而不是电路

给一台数控设备增加 96 路输入、96 路输出,电路部分的工作量其实并不大:几片驱动、一批光耦、一排端子,画过一轮原理图的人都能上手。真正让人卡住的是另一件事——线接好了,系统那边根本不认你。数控系统的 I/O 扩展走的是厂家私有总线,帧格式、握手时序、站号分配规则都不对外公开,想接进去只有两条路:买现成的远程 I/O 单元,或者拿到协议授权。数控系统 I/O 协议芯片解决的就是这个卡点:它把 I/O Link 协议和远程 I/O 串行连接这两套底层时序封进一颗 QFN48 里,对外只留一组 SPI 引脚。对主控来说,你读写的从来不是“总线”,而是一张只有二十几个地址的寄存器表。搞懂这张表怎么来的、时序余量怎么留、电源和晶体为什么这么挑,比背一遍参数表有用得多。

2. 协议翻译的底层:I/O Link 与远程 I/O 怎么被压成一张寄存器表

站在用户 CPU 的角度看,这颗芯片做的事情只有一件:把外面那条看不懂的差分总线,翻译成 24 个 SPI 地址槽。翻译层的设计决定了三件事——能接几种系统、地址怎么排、多卡怎么不打架。这三件事恰好对应芯片上三组不同的引脚。

2.1 双协议栈共存:同一组引脚怎么对接两类总线

手册的脚定义里有两组明显不同的通讯口。第一组是 JD1A、JD1B 两对差分线,每对由一条输出(RO)和一条输入(DI)组成,配合 RIO_DI、RIO_DE、RIO_RO 三个单端信号;第二组是 SPI 侧的 M_DI、M_DO、M_CLK、M_CS 四根线。前者朝外接系统,后者朝内接主控,中间所有协议细节都在芯片内部完成。

有意思的是 JD1A 和 JD1B 这两个端口的存在。手册明确写了“支持端口混插,自动扫描、识别 JD1A、JD1B 通讯端口”,也就是说现场接线的时候,两根线插 A 口还是插 B 口,芯片自己能认出来。常见的实现思路是在上电复位后对两个端口轮流做一次探测:先给端口 A 施加偏置,监听一段时间内是否出现合法的帧头跳变;没有就切到端口 B 再试一遍,把第一个响应的端口锁定为活动链路,另一个转入静默。这样做的好处是安装工人不需要辨别丝印,坏处是上电到链路建立之间有一段不确定的扫描窗口,主控在这个窗口里读到的数据是无效的,必须在初始化流程里显式等待状态灯或轮询链路标志。

这里有个容易被忽略的历史痕迹。手册的版本记录里,2019 年 12 月 11 日那一版专门写了“纠正通信定义脚功能名称”,而同一天还有一条“纠正起始地址分配描述与库文件更新”。脚定义表里那几个 JD1B_RO、JD1B_DI 的注释中,有一个标注的是“端口 A 输出”。早期命名混乱到什么程度,从这两条修订记录就能看出来。照着旧版本原理图打样的板子,如果差分对正负接反,症状不会报错,只会表现为链路偶尔建立、偶尔失败,属于最难查的那一类问题。

2.2 X/Y 地址空间与最高位读写位:0x01 与 0x81 的镜像设计

SPI 侧的地址分配是整个手册里最需要想明白的一段。手册给出的规则是:地址字节的最高位为 0 表示读操作,为 1 表示写操作。读操作的 0x01 到 0x0C 依次映射到 Y0 到 Y11,写操作的 0x81 到 0x8C 依次映射到 X0 到 X11,另外 0x91 到 0x93 是三张远程 I/O 卡的起始地址。

SPI 地址方向映射对象说明
0x01 ~ 0x0C读Y0 ~ Y1112 字节 × 8 bit = 96 点输出
0x81 ~ 0x8C写X0 ~ X1112 字节 × 8 bit = 96 点输入
0x91 ~ 0x93写远程 I/O 卡 0/1/2仅远程 I/O 型系统有效

把最高位直接拿来当方向位,是一个很省 pin 也很省状态机的做法。SPI 是全双工但这里只做半双工用,主机发完 8 bit 地址之后,从站根据最高位判断接下来这 8 个时钟是“把数据推进 X 寄存器”还是“把 Y 寄存器的内容推出去”。地址空间被压缩到 7 bit,一共 128 个槽,实际只用了二十几个,剩下的留着做扩展。代价是读写地址不连续,0x01 和 0x81 其实指向同一块物理存储的不同操作方向,写代码的时候必须自己维护两套偏移量。

# 从站芯片的地址字节构成:bit7 = 方向,bit0~6 = 寄存器编号 READ_BIT = 0x00 # 最高位为 0,读 WRITE_BIT = 0x80 # 最高位为 1,写 def y_addr(n: int) -> int: """读回 Y 区第 n 个字节,n = 0..11,对应 Y0..Y11""" return READ_BIT | (0x01 + n) # 0x01 ~ 0x0C def x_addr(n: int) -> int: """写入 X 区第 n 个字节,n = 0..11,对应 X0..XB""" return WRITE_BIT | (0x01 + n) # 0x81 ~ 0x8C def card_addr(k: int) -> int: """远程 I/O 起始卡地址,k = 0..2;仅远程 I/O 型系统使用""" return 0x91 + k # 0x91 ~ 0x93

参数和细节值得单独说一句:x_addr和y_addr传入同一个n会得到两个相差 0x80 的地址,这正是“镜像”的含义——同一块存储,从两个方向访问。card_addr的取值范围到 2 为止,但手册说最多支持 8 个单元模块,剩下的站号不在 SPI 侧暴露,而是由系统侧的站号分配规则吃掉,这一点在 2.3 节展开。

方向这件事最容易把人绕进去。X 通常被理解为“输入”,可 SPI 侧对 X 是写操作。原因在于坐标系的归属:这颗芯片在系统眼里是一个远程 I/O 单元,X 永远是“系统读到的输入点”,Y 永远是“系统给出的输出点”。所以你的主控写 X,意思是“我把外部信号送给系统”,系统那边的 PLC 程序读 X 就能拿到。我一般会这么理解——不要站在自己那颗 MCU 的立场命名,要站在系统 PLC 的立场命名,方向就顺了。

2.3 远程 I/O 的站号与起始地址段:0x91/0x92/0x93 的来历

远程 I/O 型系统走的是串行连接,手册写得很清楚:只支持与控制单元的 RIO1、RIO2 端口连接,串行连接占用的站点(通道)数要小于 8,在这个范围内可以挂多个远程 I/O 单元。每个单元的 I/O 起始地址通过 SPI 接口软件指定,就是 0x91、0x92、0x93 这三个地址。

这里的逻辑是一条链:系统侧按“站号”给每个远程 I/O 单元划一块地址窗,芯片侧需要告诉系统“我是第几号站”,这个身份信息不能靠拨码开关(QFN48 塞不下 8 位拨码),只能靠软件写入。所以 0x91 到 0x93 本质上不是数据寄存器,是身份寄存器。手册标注的“默认 0、默认 1、默认 2”意味着出厂状态就是站号 0/1/2,多卡共链的时候必须逐个改写,否则两块卡会抢同一个地址窗。

I/O Link 型系统那边是另一套规则:系统侧的 PLC 参数直接分配 Xm 16 个字节、Yn 12 个字节,不经过芯片的站号寄存器。注意这里 16 字节和 12 字节并不对称。SPI 侧只暴露 12 个字节的 X 窗口,对应 96 点,多出来的 4 个字节大概率是系统侧按字对齐留的余量,或者是被系统内部占用的诊断区。常见的实现思路是:主控只操作 12 个字节的有效窗口,剩下的地址别碰,碰了轻则无效,重则覆盖系统保留字段导致链路重同步。

3. SPI 从站时序:5M 建议速率的由来与一帧数据的完整生命周期

地址表定下来之后,剩下的问题是“多久能读一遍”。手册给了两个数字:理论上支持 20M 带宽,建议用 5M。这两个数字之间差了三倍,差额不是保守,是算出来的。

3.1 从一段 8051 驱动看 CPOL/CPHA 与时序余量

手册附了一段 8051 的驱动示例,用的是软件模拟 SPI,四位引脚用 sbit 定义。这段代码信息量比它看起来大。

sbit SPI_CS = P1^1; // 片选,低电平有效 sbit SPI_CLK = P1^0; // 时钟,空闲低电平 sbit SPI_DI = P1^2; // 主站 -> 从站 sbit SPI_DO = P1^3; // 从站 -> 主站 void W_SPI(unsigned char ad, unsigned char da) { unsigned char i; SPI_CS = 0; // 拉低选中,整个事务期间保持 for (i = 8; i != 0; i--) { // 第一段:8 bit 地址,bit7 为 1 表示写 SPI_CLK = 0; // 时钟先回低 SPI_DI = (ad & 0x80) ? 1 : 0; // 数据在上升沿之前就绪,MSB 先行 ad <<= 1; SPI_CLK = 1; // 从站在上升沿锁存地址位 } for (i = 8; i != 0; i--) { // 第二段:8 bit 数据 SPI_CLK = 0; SPI_DI = (da & 0x80) ? 1 : 0; da <<= 1; SPI_CLK = 1; } SPI_CLK = 0; SPI_DI = 0; SPI_CS = 1; // 拉高结束,从站提交本次写入 } unsigned char R_SPI(unsigned char ad) { unsigned char i, ar = 0; SPI_CS = 0; for (i = 8; i != 0; i--) { // 发地址,最高位为 0 表示读 SPI_CLK = 0; SPI_DI = (ad & 0x80) ? 1 : 0; ad <<= 1; SPI_CLK = 1; } SPI_CLK = 0; // 空一个时钟,给从站准备数据的窗口 for (i = 8; i != 0; i--) { // 采数据:高电平期间读,下降沿后移位 SPI_CLK = 1; ar <<= 1; if (SPI_DO == 1) ar |= 0x01; // MSB 先行,先到的位放最高位 SPI_CLK = 0; _nop_(); } SPI_CS = 1; return ar; }

从时序上看,这是标准的 CPOL=0(空闲低)、数据在上升沿被从站锁存、MSB 先行的写法。写方向没什么争议:主机先把 DI 摆好,再抬 CLK,从站在上升沿采样。读方向多了一个动作——发完地址之后SPI_CLK = 0空一拍。这一拍就是 turnaround,从站需要时间把 Y 寄存器的内容挂到 DO 线上,主机如果立刻抬时钟,采到的第一位是上一帧的残留。很多自己写的 SPI 读函数读回全 0 或者读回错位一 bit 的数据,问题就出在省掉了这一拍。

_nop_()的位置也值得看一眼。它在 CLK 拉低之后,作用是保证低电平维持时间不小于从站要求的最小值。软件模拟 SPI 的时候,主机跑多快完全取决于晶振和编译优化等级,这一句_nop_是唯一能控制占空比的抓手。C 编译器把它优化掉,时序就崩了。

3.2 20M 理论带宽与 5M 工程建议:为什么砍掉四分之三

先算传输本身。96 点输入加 96 点输出,等于 12 加 12 共 24 个数据字节,每个字节都要配一个地址字节,一共 48 个字节、384 个 bit。这还只是纯数据位,没算片选建立、片选保持、帧间间隔。

def frame_time(bits: int, f_spi_hz: float, overhead_ratio: float = 1.0) -> float: """估算完整刷新一轮 X/Y 所需时间 bits: 一帧总位数 = (地址 8 + 数据 8) * 24 = 384 f_spi_hz: SPI 时钟频率 overhead_ratio: 帧间开销系数,包含 CS 建立/保持与主站调度间隙 """ return bits / f_spi_hz * overhead_ratio for f in (5e6, 20e6): t = frame_time(384, f, overhead_ratio=1.3) print(f"{f/1e6:.0f} MHz -> {t*1e6:.1f} us ({1/t:,.0f} 次/秒)") # 5 MHz -> 99.8 us (10,020 次/秒) # 20 MHz -> 25.0 us (40,080 次/秒)

算下来 5M 时钟下一轮刷新约 100 微秒,也就是每秒可以刷一万次;20M 下是两万五千分之一秒量级。对数控系统来说,I/O 刷新周期通常按毫秒计,一百微秒已经富余两个数量级。那为什么还要砍到 5M?

第一个原因是信号完整性。SPI 是单端信号,四根线走在同一块板上,20M 的时候上升沿只有几纳秒,走线稍微长一点、回流路径没处理好,M_CLK 上就会出现振铃和串扰,采样点直接落在振铃的平台上。板子上还有 1.2V 内核和 3.3V I/O 两套电源、一颗 48MHz 晶振、若干路差分对,EMI 环境并不干净。

第二个原因是主站能力。手册给的建议速率是给“客户 CPU、CPLD”这类主站留的余量。用 GPIO 模拟 SPI 的 8 位机根本跑不到 5M,一条指令就要一个微秒;用硬件 SPI 外设的 MCU 可以轻松跑到 20M,但中断响应、DMA 调度、寄存器搬运的时间往往比传输本身还长。真正决定刷新周期的是主站的调度能力,不是那根时钟线。

第三个原因是链路上的从站不止你一个。远程 I/O 串行连接上最多挂 8 个单元模块,芯片作为其中一环,转发和应答本身也要时间。把 SPI 侧开到极限,留给协议栈内部处理的余量就被挤没了。

3.3 双端口自动扫描与端口混插:状态灯是怎么设计的

前面提到 JD1A/JD1B 双端口自动扫描,这个机制有一个直接的用户侧接口:LED1 和 LED2。手册的脚定义里,9 脚是 LED1,标注 “Link error”,10 脚是 LED2,标注 “Link ok”。两个灯而不是一个灯,这个设计不是冗余。

一个灯只能表达“亮/灭”,两个状态。两个灯可以表达四种组合:全灭(没上电或者芯片没使能)、只有 error 亮(链路有活动但帧错误率高)、只有 ok 亮(链路正常)、两个都亮(扫描窗口内或者状态机卡死)。现场调试的时候,这四种组合直接对应四个排查方向,比拿示波器一路一路量差分对快得多。常见的实现思路是让 ok 灯以链路帧率为基准做闪烁,error 灯在 CRC 错误、帧超时、站号冲突时置位,两者组合起来的含义写进调试手册。

双端口扫描和状态灯是一套组合拳:扫描负责“找到活的那条链路”,状态灯负责“把扫描结果告诉人”。少了灯,扫描逻辑在芯片内部跑,外面完全看不见,出问题只能靠猜。

4. 硬件底座:48MHz 有源晶振、双电源域与 QFN48 的三个约束

协议层再漂亮,也要靠电源和时钟兜住。手册在“设计示例和要求”这一章里写了三条硬要求:电源纹波 30mV 以下、必须用有源晶振、手轮信号必须加整形缓冲。这三条都不是建议,是边界条件。

4.1 为什么必须外置 48MHz 有源晶振

手册的措辞是“外部有源晶振,要求晶振频率 48MHz,宽温、低失真、低温漂特性”,结构介绍里补了一句“采用外置晶体时钟,确保低温漂移,提高信号通讯稳定性”。

三个关键词,每个都指向一个具体的失效模式。宽温对应 -40℃ 到 +85℃ 的工作范围,无源晶振配内部反相器在低温端起振困难、频率偏移大,这是血泪经验堆出来的结论。低失真对应占空比,48MHz 经过整数分频得到总线位时钟,分频比是整数才能保证 50% 占空比,占空比一歪,采样点的相位余量就被吃掉一半。低温漂对应长期稳定性,I/O Link 这类同步串行总线靠边沿对齐,时钟源漂个几十 ppm,累积到一帧末尾就是采样错位。

为什么是 48MHz 而不是别的数?常见的实现思路是:这个频率能被整数分频出一组干净的总线位时钟,同时留出足够的过采样倍数给接收端做数字滤波。换一个有小数分频关系的频率,恢复出来的时钟会有周期性抖动,抖动在示波器上看不出来,在误码率上看得出来。

有源晶振的电源也不能直接挂 3.3V。手册要求“电源接入前设计磁珠及旁路滤波电容”,因为晶振是板上最强的周期性噪声源之一,它的电源脚如果不隔离,噪声会顺着 3.3V 网络爬进 I/O 域,再从 I/O 域耦合到 SP)I 的时钟线上。

4.2 双电源域与 30mV 纹波红线

芯片有两套电源:内核 1.2V、I/O 3.3V。12 脚 Vcc-1V2 单独供电,1、25、36 脚是 Vcc-3V3。

参数最小典型最大备注
内核 VCC1.14V1.2V1.26V容差约 ±5%
I/O VCCX2.375V3.3V3.46V容差很宽
工作温度-40℃—+85℃TJ 上限 +100℃
储存温度-65℃—+125℃—
ESD(HBM)1000V——超过即可能损伤
静态电流 ICC—2.8mA—VCCX = 3.3V,测试值

两个域的容差差了一个数量级,这件事直接决定了电源方案。3.3V 域从 2.375V 到 3.46V 都能工作,随便一颗 LDO 都兜得住;1.2V 域只有 1.14V 到 1.26V,上下各 60mV,纹波要求 30mV 意味着纹波峰峰值不能超过容差的一半。用开关电源直接降到 1.2V,轻载跳频时的纹波轻松突破 50mV。手册的建议很明确:高纹波抑制、低纹波输出、电压精度稳定的线性精密 LDO。

电流预算反而不紧张。静态电流典型值 2.8mA,加载时 ICCX 在 2.45mA 到 2.74mA 之间,一颗小封装 LDO 完全够用。这意味着选型的时候可以把注意力全部放在纹波抑制比和负载调整率上,不用纠结效率。为了 3mA 的负载去做开关电源,是把问题搞复杂了。

布局上还有两个细节:芯片电源供电串磁珠,进入芯片前加旁路滤波电容。磁珠的作用是把板级噪声挡在外面,旁路电容的作用是把芯片自己产生的瞬态电流就地消化。顺序不能反——先磁珠后电容,电容要尽可能贴近电源脚,中间不要打过孔。

4.3 手轮脉冲通道:为什么必须加一级 LV14 缓冲

手册里有两路手轮通道,MPG_A1、MPG_B1 是第一通道的 HA、HB 信号,MPG_A2、MPG_B2 是第二通道,接收的是方波。要求写得很硬:必须选工业级 74 系列 LV14 低工作电压高速驱动芯片做整形,可实现宽电压波形整形,也可作为信号整形缓冲驱动,否则手轮脉冲信号可能错乱,或者相对比较容易损坏芯片。

这段话背后是机械手轮的电气特性。手轮内部是编码盘加光电或磁电检测,输出的是两路正交方波,边沿上升时间随转速和负载变化,低速旋转时边沿可能慢到几十微秒,中间还夹着抖动。这种信号如果直接进芯片的输入级,会在阈值附近来回穿越,一个机械刻度被数成两个、三个甚至更多,操作者看到的现象是“摇一格走三格”。更糟的情况是输入级长时间工作在线性区,功耗和发热都上去了,ESD 耐受度下降,最后表现为输入脚损坏。

施密特触发整形器解决的正是这件事:把缓慢的、带抖动的边沿整成陡峭的、干净的数字沿,同时提供一级驱动能力。手册特别强调“工业级”,因为手轮是操作者天天摸的部件,人体静电、线缆感应、电机干扰都会顺着这条线进来。

这条注意事项在版本记录里的位置也很说明问题:2020 年 2 月 27 日的 B0.3 版专门“增加手轮脉冲通道电路设计的注意事项描述”。也就是说,在这之前的版本里,这句话是缺的,缺了就会有人省掉那颗整形芯片。

5. 避坑与排查:原理图评审阶段最容易翻车的五个位置

手册写得再细,也挡不住照着画还能画错的组合。下面五条是这类板子从打样到量产之间最常出现的翻车点,按“现象 → 原因 → 解决”拆开写。

5.1 使能脚悬空,芯片像没焊一样

现象:SPI 读写全部返回 0xFF 或者 0x00,状态灯不亮,示波器上看 M_CLK 和 M_CS 波形都正常,就是没有 M_DO 应答。

原因:手册写得很直白——“芯片有选通(IC_EN)设计,在不选通的前提下芯片无法正常工作”,48 脚 IC_EN、48 脚旁边的 IC_/RST 复位,这两个脚任何一个处理不当,芯片内部状态机就不启动。很多人习惯把使能脚当“可选项”,悬空或者随手拉个弱下拉,结果芯片永远在关断状态。

解决:IC_EN 必须由主控主动驱动,上电时序里先给电源、等电源稳定、再拉使能、最后才开始发 SPI 帧。复位脚同理,上电复位要保证足够长的低电平时间,具体长度参考芯片手册的电源上升时间要求。评审的时候把这两个脚单独拎出来标红,比事后飞线快。

5.2 照抄手册示例代码,编译报错或者读回全错

现象:把手册里的 SPI 驱动贴进工程,R_SPI编译不过;改完之后能编译,但读回来的数据永远是 0 或者固定值。

原因:手册示例是印刷体,存在笔误。R_SPI里有一处adc <<= 1,前文定义的变量名是ad,原样抄下来必然报未定义标识符。另外整个示例是 8051 的写法,sbit、_nop_()、P1^0这些在 ARM 或 RISC-V 平台上全都不存在,硬套会得到一堆编译错误。

解决:不要照抄,按位操作语义重写。把地址字节、数据字节的移位逻辑抽成平台无关的函数,用硬件 SPI 外设的时候注意R_SPI里那一拍 turnaround——硬件 SPI 通常是全双工连续时钟,发完地址立刻就开始收数据,中间没有空隙,从站来不及挂载数据线。常见的做法是发地址用一个事务、收数据用第二个事务,靠 CS 重新拉低来制造间隔。

5.3 省掉手轮整形芯片,脉冲丢得莫名其妙

现象:手轮低速旋转时计数不准,摇一格系统走两格或者一格都不走;转速快的时候反而正常。极端情况下用一段时间后手轮通道彻底失效。

原因:4.3 节说过,机械手轮的输出边沿慢且带抖动,直接进芯片输入级会在阈值附近多次穿越。低速时边沿最慢,问题最明显;高速时边沿变陡,反而看不出来,这个反直觉的现象很容易让人误判成“软件消抖没做好”。

解决:按手册要求加 74 系列 LV14 低工作电压高速整形芯片,电源脚就近加旁路电容,输入串限流电阻,输出到芯片这一段走线尽量短。如果手轮线缆要出机柜,还要加 TVS 和阻抗匹配。评价标准不是“能不能用”,是“连续摇一万格计数误差为零”。

5.4 多卡共链时起始地址没配或配重

现象:单卡工作正常,挂第二块卡之后,两块卡的 I/O 数据串台,或者其中一块完全没响应。远程 I/O 型系统上更容易出现。

原因:2.3 节讲过,0x91 到 0x93 是身份寄存器,出厂默认站号 0、1、2。多卡共链的时候如果没在初始化流程里逐个改写,两块卡会认为自己是同一个站,系统侧读到的数据取决于总线的仲裁结果,表现为随机串台。

解决:初始化阶段先给每块卡单独上电、单独写站号,再全部使能。站号分配表写进固件常量,不要靠人工记。串行连接占用的站点数必须小于 8,超了不会报错,只会表现为链路时好时坏。

5.5 状态指示灯没画,现场无法区分故障层级

现象:客户现场反馈“不动了”,拿回来上电测试一切正常,再送回去又不正常,来回折腾好几轮。

原因:原理图上省掉了 LED1 和 LED2。没有指示灯,链路层故障(差分对没接对、站号冲突、扫描没锁定)和芯片层故障(没使能、电源纹波超标、晶振不起振)在外部表现完全一样——都是“没有数据”。

解决:把两个灯画上,位置放在面板可见处,含义写进调试手册:ok 灯闪代表链路正常、error 灯亮代表帧错误、两个都灭代表芯片没起来。有这两个灯,现场第一反应就是看一眼面板,能省掉大量返修物流成本。

6. 设计取舍:地址资源、封装兼容与二次开发空间的三方博弈

把型号表摊开看,取舍就浮出来了。

型号适配系统类型内核/I/O 电压X 地址Y 地址手轮通道应用层协议
A992A双系统1.2V / 3.3V96962标准 TTL
F992AI/O Link 型1.2V / 3.3V96962标准 TTL
M990A远程 I/O 型1.2V / 3.3V9696无标准 TTL

三行数据说明三件事。第一,96 点几乎顶到了这套协议单站点的地址上限——12 个字节的 Y 窗口正好对应 12 个寄存器,再加就得换协议封装,不是加个寄存器能解决的。第二,手轮通道不是标配,只有 I/O Link 型系统那几款才有,因为手轮脉冲在远程 I/O 协议里没有对应的传输通道,硬塞进去只能走私有扩展。第三,三款的封装完全兼容,管脚与另外几个型号通用。

封装兼容是这个产品线里最有意思的一笔。QFN48、6mm × 6mm、无铅、符合 RoHS、物质成分符合 IPC-1752,这些是规格;真正影响产品策略的是“管脚完全兼容”这一句。同一块 PCB 可以焊不同型号的芯片,靠换 BOM 做出高中低三档产品,外壳、结构件、认证全部复用。对小批量、多品种的设备厂来说,这比多给 32 路 I/O 值钱得多——省下的是一整套模具和一次认证费用。

代价也在这里。96 点的地址上限意味着这颗芯片做不了更大规模的扩展,真要上百点以上,得靠多卡共链,而多卡共链又受“占用站点数小于 8”的约束,等于把系统的扩展天花板提前封死了。这是设计者主动做的选择:与其把单颗芯片做大做贵,不如把地址资源切齐、把封装统一、让客户按需堆叠。堆叠的成本转嫁给客户,但客户换来的是产品分级的自由。

从那以后我每次出这类板子的原理图,都会强制把使能脚、复位脚、两个状态灯、手轮整形缓冲这四项单独拉一张清单过一遍,一项不勾完不发出打样。这份手册真正值钱的地方不在参数表,在于它把哪些东西是硬约束、哪些东西是可以商量着来的,划得很清楚——比如 5M 是建议、96 点是上限、纹波 30mV 是红线、手动轮必须整形。分得清这三类,方案才立得住。希望帮到你。

本文还有配套的精品资源,点击获取

返回列表