我有一个SAML21J18A主板(来自Atmel,带有AVR处理器),以及一个SIM908开发板。所以,这是技术规范,但我想得到一个非常笼统的问题的答案:
当您将其中一个MCU的GPIO引脚连接到另一个外设上的“TX”引脚时,从该TX引脚读取数据的常用方法是什么?我必须使用I2C协议吗?我是否必须阅读GPIO的状态?甚至可以用GPIO读取复杂数据,而不仅仅是真或假状态?
感谢你提前回答,我在这个问题上有点迷失。
答案 0 :(得分:1)
如果引脚标记为“TX”,特别是如果有相应的“RX”引脚,那么它可能是UART。 I2C引脚通常标记为DAta和CLock。 SPI引脚通常标记为MOSI / SIMO / SCLK或DI / DO / CLK。
可以将任何这些信号挂接到GPIO引脚,并将软件驱动程序写入“bit-bang”接口以实现协议。但是,如果将引脚连接到微控制器上的相应串行端口引脚,并且让微控制器的硬件外设完成详细工作,那么你可以更好地 。
如果这个TX引脚真的是UART,那么你应该将它连接到微控制器UART上的RX引脚。
答案 1 :(得分:1)
SIM908使用UART协议与主机通信。 AT命令是模块理解的语言。调制解调器使用GSM_TX引脚向主机发送响应,而GSM_RX引脚用于接收来自主机的命令,在这种情况下,主机是SAM板。您可能还会注意到主板上的GPS_TX和GPS_RX引脚。
数字GPIO引脚以逻辑电平HIGH或LOW发送/接收数据。由于标准UART传输包括一个起始位,8位数据和一个停止位(所有这些都可以表示为以特定恒定频率发送的一系列HIGH和LOW),因此可以使用数字GPIO引脚,正确的时机,在模块和主机之间接收和传输数据;这叫做bit-banging。
使用连接到电路板上特定引脚的内置UART硬件更方便,更可靠。对UART外设进行正确的初始化,确保选择正确的波特率,然后向模块发出“AT”;如果一切顺利,你应该收到“OK”。如果您收到乱码,则表示模块未设置为自动波特率,并且您使用了错误的波特率,这意味着您必须尝试从4800向上的所有标准波特值。如果你展示你的代码,你可以得到更好的帮助。
答案 2 :(得分:0)
这可能是一个已经回答的uart pin。你可以用gpio引脚做什么,你可以做大部分(如果不是所有的)串行协议(有几个引脚),uart,spi,i2c,mdio等。使用所谓的bit banging。对于输出引脚,通常必须使用某种类型的内部定时器来计算状态变化之间的持续时间,以便在器件外部正确定时转换以满足该协议所需的任何时序规范。它创造了对硬件为您所做的事情的欣赏,并且在硬件中实现是微不足道的(尤其是当您希望同时进行多个不同的实现时)但在软件中更难以燃烧大量的CPU周期,并不总是准确定时。如果你不能足够快地采样和处理状态变化,接收到uart信号,例如spi slave等,接收比特撞击的东西会更难。数字逻辑只有零和一个状态(和x和y和z在模拟中,和现实生活中的z)复杂的协议只是零和一个状态串联或并联或两者兼而有之。
从技术上讲,如果您具有采样率和处理能力,则可以使用gpio执行所有这些和更复杂的串行协议。