MCU - 一般来说,如何从 TX 引脚读取数据?

MCU - Generally speaking, How to read data from a TX pin?

我有一块 SAML21J18A 板(来自 Atmel,带有 AVR 处理器)和一块 SIM908 开发板。所以,这是技术规格,但我想得到一个非常笼统的问题的答案:

当您将 MCU 的一个 GPIO 引脚连接到另一个外围设备上的 "TX" 引脚时,从该 TX 引脚读取数据的常用方法是什么?我必须使用 I2C 协议吗?我是否必须随时间阅读 GPIO 的状态?是否有可能使用 GPIO 读取复杂数据,而不仅仅是真或假状态?

感谢您提前回答,我对这个问题有点迷茫。

如果引脚标记为 "TX",特别是如果有相应的 "RX" 引脚,那么它很可能是 UART。 I2C 引脚通常标记为 DAta 和 CLock。 SPI 引脚通常标记为 MOSI/SIMO/SCLK 或 DI/DO/CLK。

可以将这些信号中的任何一个连接到 GPIO 引脚,并将软件驱动程序写入“bit-bang”接口以实现协议。但是你 much 最好将引脚连接到微控制器上适当的串行端口引脚,并让微控制器的硬件外围设备完成详细工作。

如果这个 TX 引脚确实是一个 UART,那么您应该将它连接到微控制器 UART 上的 RX 引脚。

这可能是一个已经回答过的 uart 引脚。你可以用 gpio pin 做什么,你可以做大部分(如果不是全部)串行协议(有几个引脚)、uart、spi、i2c、mdio 等。使用所谓的位碰撞。对于输出引脚,您通常必须使用某种内部计时器来计时状态更改之间的持续时间,以便在部件外部正确计时转换以满足该协议所需的任何时序规范。它让您欣赏硬件为您所做的事情,并且在硬件中实现起来很简单(尤其是当您希望同时运行多个不同的东西时),但在软件中更难实现,因为它会消耗很多 cpu 周期,并不总是准确计时。如果你不能足够快地采样和处理状态变化,接收位碰撞的东西会更难,例如接收一个 uart 信号,一个 spi 从机等。数字逻辑只有零和一个状态(模拟中的 x 和 y 和 z,和 z 在现实生活中)复杂的协议只不过是串联或并联或两者的零和一状态。

从技术上讲,如果您具有采样率和处理能力,则可以使用 gpio 执行所有这些和更复杂的串行协议。

SIM908使用UART协议与主机通信。 AT 命令是模块理解的语言。调制解调器使用 GSM_TX 引脚向主机发送响应,而 GSM_RX 引脚用于接收来自主机的命令,在本例中为您的 SAM 板。您可能还会注意到电路板上的 GPS_TX 和 GPS_RX 引脚。

数字 GPIO 引脚 sends/receives 逻辑电平数据,高电平或低电平。由于标准 UART 传输由起始位、8 位数据和停止位组成(所有这些都可以表示为以特定恒定频率发送的一系列高电平和低电平),因此可以使用数字 GPIO 引脚,与正确的时间,在模块和主机之间接收和发送数据;这称为位碰撞。

然而,使用连接到板上特定引脚的内置 UART 硬件更加方便和可靠。对 UART 外围设备执行正确的初始化,确保 select 正确的波特率,并首先向模块发出 "AT";如果一切顺利,您应该会收到 "OK"。如果您收到乱码,则表示模块未设置为自动波特率并且您使用了错误的波特率,这意味着您必须尝试 4800 以上的所有标准波特率值。如果您展示您的代码,您可以获得更好的帮助。