好的,我有一个uart接口(TXD GPIO 14,RXD GPIO 15)。我至少还需要一个uart接口。可行的解决方案:


位敲打:
使用两个不相关的备用GPIO。我知道在标准linux上计时是一个问题。波特率很低的情况下可靠吗?
切换:
RPI决定何时与哪个设备通话。使用例如CD4066BC.spi到2 x uart桥:
找不到合适的零件(可用性,价格,dil包装)
usb到uart:
昂贵

还有其他选择吗?如果可以的话,我倾向于切换。您有什么建议?

评论

相关文章:“用于对UART进行位绑定的PiGPIO库示例”

#1 楼

USB UART(例如FTDI)并不昂贵。您所有其他选择听起来像是它们将花费您更多的零件和时间,而不是可能花费您的〜13美元,并且不可靠或缓慢。只需使用快速,无故障的选项,例如:

http://www.dfrobot.com/index.php?route=product/product&product_product=id#147#.UOamLG-sh8E

Sparkfun也卖一个。实际上,也许您可​​以从旧的USB设备中取出一个,或者从不知道其用途的旧货店购买一个。

我弄错了一个Arduino项目的SPI到UART适配器,因为没有现有的库,所以我写了自己的库。最终,它工作正常,但如果我可以只花15美元,就可以买到。实际上,考虑到要花费时间,我应该拥有一个带有4个串行端口的巨型设备。

或者,如果您想要大量的串行端口,则可以查看RS485串行端口,它类似于232(尽管不兼容),它支持多点连接,即一条线上的多个接口。

评论


从软件的角度来看,这也是简便的选择。 FTDI具有开箱即用的Linux驱动程序支持。所有其他选项都将要求驾驶员进行艰苦的工作。

–贝尔
13年3月20日在8:18

cp2102是我最喜欢的USB uart芯片。快速的亚马逊搜索显示它们的价格为6.99美元(实际上为1.50美元,其中包括电缆)!无法击败!

–portforwardpodcast
15年4月6日在8:37

#2 楼

我找到了您想要的东西:UART / IrDA / GPIO桥的I2C / SPI从设备。

它们具有单版本和双版本(因此有1个或2个额外的UART)。它们(NXP)还具有I2C / SPI主站到UART / IrDA / GPIO桥(如果需要的话,还可以用于另一端)。 br />
Maxim也具有完全相同的芯片。

评论


很好的信息,但是NXP链接在此处提供HTTP 403。

–汤姆
17年1月23日在12:12

以下是相关的数据表:nxp.com/documents/data_sheet/SC16IS752_SC16IS762.pdf?

–汤姆
17年1月23日在12:59

#3 楼

如果您决定跳过添加额外的硬件,而只是按位进行操作,这并不像想象中那么困难。

首先,您的通信线程必须实时:
#include<sched.h>

struct sched_param param;               
param.sched_priority = sched_get_priority_max(SCHED_FIFO);
if( sched_setscheduler( 0, SCHED_FIFO, &param ) == -1 )
{
        perror("sched_setscheduler");
        return -1;
}


从现在开始,您的线程将不会在每秒950ms的时间内被抢占*,除非它及时地(通过sched_yield()usleep())返回控制权,永远不会抢先。在850MHz CPU的情况下,即使在最快速度下,位撞击循环也将在大多数时间处于空闲状态。对方”发送,将永远丢失。但是为此,您可以使用传输控制。为CTS线路分配更多的GPIO,在屈服之前将其下拉,然后在恢复控制时进行备份:

睡眠前通过RS232发送XOFF字符,恢复操作后通过XON发送。这些默认的ASCII代码是XOFF /“停止发送”的'\x13'和XON /“恢复发送”的'\x11'

当然,您的远程设备必须遵守这些。否则,某些数据将丢失。

#4 楼

Raspberry Pi 4现在最多支持4个UART接口,需要通过设备树覆盖来启用它。您可以找到操作方法以及目前在此处使用的引脚:

https://www.raspberrypi.org/forums/viewtopic.php?t=244827

RPi基金会仍在为此准备文档。

#5 楼

USB至UART桥接器价格便宜且易于使用,但时序特性确实很差。 Newark出售带有嵌入式STM32F ARM处理器的“嵌入式Pi”板,您可以在上面编写裸机代码。该芯片上有三个UART,我认为它们可以非常快地运行。如果您要使用其中一个与Raspberry Pi进行通信,则会使其中两个可供其他用途。免责声明:我已经购买了其中一块板,但是到目前为止,仅使用Raspberry Pi本身就可以直接满足I / O需求。嵌入式Pi板可能可以处理很多数字,尤其是当您愿意编写一些Arm汇编语言时。如果在一块板上有两组16个I / O引脚可用,则可能有16个同时运行的软件UART以相当不错的波特率一次工作(以3倍或5倍的波特率周期性中断,该波特率存储从接收端口到缓冲区的16位锁存值,并从缓冲区向发送端口输出16位预计算值;如果这样做,那么只要软件UART的平均服务时间不太长,它就可以偶尔遇到最坏的情况(例如,所有16个端口同时接收一个字节)都无关紧要。甚至不必查看各个UART。假设您以5倍速率采样数据,并且缓冲区的最后47个字节在紧接其之前被复制。假设数据以升序写入缓冲区,则可以是否已完全接收到1个字节中的任何一个字节6个频道,只需说:

bytes_ready = (armed_flag & data[rxptr] & ~data[rxptr-47] & ~data[rxptr-46] & ~data[rxptr-45] & ~data[rx_ptr-44]);


如果bytes_ready为零,则未接收到数据。否则,例如bytes_ready的第2位被设置,这意味着可以在data [rx_ptr-40],data [rx_ptr-35],data [rx_ptr-30]等的bit 2中找到接收到的数据字节。清除armed_flag的第2位,并安排在大约44个样本后将其重置。

这种方法将需要对完全接收到一个字节数据的那些样本进行一些工作(并且可能如果所有16个通道都有一个字节的数据同时到达,则需要大量工作),但是在大多数样本上,工作量将非常小。如果一个具有64个I / O引脚,则使用这种方法可以处理多达32个UART,而无需在“普通”情况下增加任何额外的工作。

#6 楼

像Picaxe这样的微控制器可以在一个引脚上接收串行数据,并在某个引脚上适当地输出串行数据。如果您准备告诉Picaxe输出哪个引脚,这将有效地为您提供更多串行输出。它也可以执行相同的操作,但是反过来,因此它可以从多个设备接收串行数据并将其发送到Raspberry Pi。
另一种选择是使连接的设备需要限定符。这意味着设备1将必须接收数据“ d1”,例如,在设备1侦听串行线上的其他数据之前。设备2可以将“ d2”作为其限定符。这意味着要向设备1说“ hello”,您只需要在UART线上发送“ d1hello”即可。 /www.techsupplies.co.uk/,它们具有多种尺寸,并带有不同数量的销钉,依此类推。

#7 楼

如果与多个UART从设备的通信不需要并行进行,则可以在它们之间共享一个可用的UART端口。
您可以使用晶体管仅启用与当前所需设备的RxD / TxD连接交谈。这些晶体管可以由其他Raspberry Pi GPIO引脚控制。

#8 楼

我有同样的问题。我需要连接2-4个GSM模块,然后找到了硬件解决方案:http://www.instructables.com/id/SPI-to-4-x-UART-Bridge-MULTIUART/

此解决方案基于PIC24FJ64GA306。您可以用Atmel MCU替换PIC,但是必须创建新的PCB :)

#9 楼

我正在使用SC16IS752 IC,它是SPI至2xUART转换器。它与Raspbian Stretch搭配使用效果很好。

它比FTDI芯片贵一点,但是有两个uart,而且我不必使用宝贵的USB端口。

#10 楼

对于没有USB UART的任何项目,必须通过GPIO引脚并使用低功耗的Raspberry Pi(例如Pi Zero)(版本4除外)实现附加的UART,而版本4现在配备了4个串行,使用soft_uart可以添加额外的串行接口。该模块可以将任意两个数字引脚转换为软串行接口(例如/ dev / ttySOFT0)。
由于UART基于软件,因此通信需要以低波特率进行。尽管自述文件建议将其设置为4800。我发现较低的值等于2400相对稳定。
apt-get install raspberrypi-kernel-headers

确保内核版本与标头版本匹配。

#11 楼

看看https://www.kickstarter.com/projects/1915118535/uart-hat-for-raspberry-pi,希望它可以解决您的问题

评论


由于这不是实际可用的产品,因此这是一个糟糕的选择。

–Jacobm001♦
2015年4月6日,下午3:36

更糟糕的是,似乎执行KS项目的公司在没有交付货物的情况下就倒闭了。

–酒浸透了
15年11月30日在16:41

#12 楼

另一个解决方案是升级到PI4,显然您可以在该引脚上启用多个uart引脚(我自己做了)。
您可以在Google上搜索信息,这主要是一种配置设置,用于启用其他uart引脚。 />
https://www.raspberrypi.org/forums/viewtopic.php?t=244827

对此进行了解释。
显然pi4中的新gpio引脚基本上允许通过config.txt添加3个其他uart端口,有关如何设置它的更多详细信息,请查看链接。

评论


为了得到一个好的答案,您应该解释一下如何设置它,否则,您将有投票表决的风险。

– Ingo
20-4-28上午10:34