Other Parts Discussed in Thread: MSPM0G3507
器件型号: MSPM0G3507
尊敬的 TI 论坛:
我想问 MSPM0G3507 是否支持配置为开漏输出的 GPIO 引脚、同时 是否能够读回该引脚上的数字值? 因此、将 其配置为输出、但能够读回。
是否建议将引脚设置运行时切换、例如从输出切换到输入、或者以另一种方式实现单线通信(假设使用开漏输出将数据放置在线路上)? 是否建议安全应用像这样使用您的 MCU?
提前感谢您的支持!
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Other Parts Discussed in Thread: MSPM0G3507
器件型号: MSPM0G3507
尊敬的 TI 论坛:
我想问 MSPM0G3507 是否支持配置为开漏输出的 GPIO 引脚、同时 是否能够读回该引脚上的数字值? 因此、将 其配置为输出、但能够读回。
是否建议将引脚设置运行时切换、例如从输出切换到输入、或者以另一种方式实现单线通信(假设使用开漏输出将数据放置在线路上)? 是否建议安全应用像这样使用您的 MCU?
提前感谢您的支持!
尊敬的 Marton:
是的、这受支持。
在 MSPM0G3507 上、可通过 IOMUX INENA 位启用输入缓冲器、以便软件可以读取焊盘上存在的实际逻辑电平、即使引脚配置为 GPIO 输出运行也是如此。 如果要实现开漏式单线接口并读回总线状态、这是正确的方法。
例如、配置该引脚后、可以通过以下命令启用输入缓冲器:
IOMUX->SECCFG.PINCM[pincmIndex] |= IOMUX_PINCM_INENA_ENABLE;
然后使用正常的 GPIO 输入读取路径读取引脚、例如:
bool busHigh = (DL_GPIO_readPins(GPIOx, GPIO_PIN_x) != 0U);
对于单线开漏通信、除非协议确实需要、否则我不建议在输出模式和输入模式之间重复切换引脚。 一种更好的方法是保持引脚配置固定为开漏/高阻态 ON-1、启用输入缓冲器并按如下方式控制总线:
Transmit 0: drive the pin low
Transmit 1: release the pin, external pullup brings the line high
Receive: release the pin and read the input state
这可以避免不必要的 IOMUX 运行时重新配置、并降低出现时序或争用问题的可能性。
一些重要的硬件说明:
使用大小可满足所需总线速度和电容的外部上拉电阻。
确保单线总线上的所有器件均为漏极开路/集电极开路。 任何器件都不应主动将线路驱动为高电平。
如果使用 MSPM0 ODIO 和 5V 容限开漏引脚、硬件开发指南注意到 ODIO 引脚需要外部上拉电阻、因此我们建议在引脚和上拉路径之间使用串联电阻、270Ω 显示为建议值。
MSPM0G3507 数据表定义了支持开漏的信号类型(包括 OD 和 IOD)、将 IOD 描述为具有开漏行为的输入、输出或同时输入/输出。
对于安全应用、这是可能的、但安全情况取决于系统级实现、而不仅仅是 GPIO 功能。 如果这种通信与安全相关、我建议添加如下诊断:
驱动为低电平后回读、以检测将总线拉至低电平失败
释放线路后回读、以便检测卡在低电平的故障、
总线阻塞的超时检测、
帧上的 CRC/校验和、
序列计数器或活动计数器
在通信丢失时定义了安全状态、
总线争用分析、
外部上拉/开路/短路故障分析。
如果这是汽车式单线网络、还应考虑专用 LIN 物理层是否更合适。 TI 的 MSPM0 G 系列硬件指南将 LIN 描述为一种常见的单线汽车接口、并展示了典型的 MSPM0 + LIN 收发器实现方案。与仅 GPIO 直接总线相比、这种实现方案提供了更强大的物理层。 希望这对您有所帮助!
-布赖恩