我的Pi3串行控制台产生垃圾,无法响应键盘。

#1 楼


这个答案仍然是正确的,并且更详细地说明了更改的性质,但是当前Raspbian的大多数用户应该只运行sudo raspi-config选择Interfacing Options / Serial,然后指定是否要使用串行控制台(可能不是),然后选择启用了串行端口硬件(可能是)。然后在任何可访问串行端口的代码中使用/dev/serial0。特色的PL011 UART已从接头引脚移至蓝牙芯片,并且迷你UART在接头引脚8和10上可用。默认的串行连接在针8和10以及蓝牙上。)
这会对串行接口的用户产生很多影响。 miniUART现在可以在/dev/ttyAMA0上使用。
在最新的操作系统软件中,有一个/dev/ttyS0选择合适的设备,因此您可以用/dev/serial0替换/dev/ttyAMA0,并在Pi3和早期型号上使用相同的软件。
不幸的是还有许多其他后果:-
The mini UART is a secondary low throughput UART  
  intended to be used as a console.
The mini Uart has the following features:
• 7 or 8 bit operation.
• 1 start and 1 stop bit.
• No parities.
• Break generation.
• 8 symbols deep FIFOs for receive and transmit.
• SW controlled RTS, SW readable CTS.
• Auto flow control with programmable FIFO level.
• 16550 like registers.
• Baudrate derived from system clock.


有一个杀手级功能“来自系统时钟的波特率”,它使miniUART失效,因为该时钟可以动态更改,例如。如果系统进入低功耗模式或处于低功耗模式。
修改/dev/serial0可以通过在末尾添加以下行来消除此依赖性:-
core_freq=250

这可以解决问题,并且似乎具有影响不大。 /boot/config.txtSPI clock frequency也取决于系统时钟。

出于某些奇怪的原因,使用最新的4.4.9内核的Pi3的默认值为DISABLE UART。要启用它,您需要在ARM Timer中更改
enable_uart=1。 (这也修复了/boot/config.txt,因此不再需要。)

最后,如果您不使用蓝牙(或使用要求不高),则可以在设备树中交换端口。在core_freq中描述了一个miniuart-btdisable-bt模块。

评论


谢谢@Milliways的出色解释。我还没有做的...我有一个使用UART连接到我的树莓派的Radio-Module,它更喜欢9600的波特率。因此,如果我设置core_freq = 250然后在马蟒脚本?另外,如果您可以看一下,那将是很棒的:raspberrypi.stackexchange.com/questions/47379 / ...谢谢!

–乔治
16年5月15日在18:30

我已经尝试了/ dev / serial0和/boot/config.txt中的enable_uart = 1,并使用了曾经与raspberry pi 2一起使用的connectioningPi代码,但仍无法启动串行通信(返回条件为-1)。我也尝试了/ dev / S0无济于事。我可能会缺少什么? (也从raspi-config释放了串行端口)。 (包括raspbian在内的所有信息都是最新的)

–ozgeneral
16年5月25日在7:32



@ OE1如果您有问题,请在新问题而不是在注释中提出。

–地铁
16年5月25日在7:53

我有点困惑。您如何表示它不支持奇偶校验?我有一个与pi3对话的设备,它必须具有偶数奇偶校验,否则我的系统无法与之对话。在遵循您的答案和naseer答案之后,我能够成功将pi3运行到我对该程序设置为偶数奇偶校验的设备的程序对话中。

– ThN
16 Sep 16 '13:51



您能补充一下USB转UART转换器应兼容3.3V而不兼容5V。

– MaNyYaCk
18年7月17日在8:35

#2 楼

终于,这对我的pi3起作用了(os:debian jessie)

请仔细按照以下6个步骤操作。当连接到网络时,通过终端或台式机和外壳进行登录使用以下命令配置系统: >
步骤2-如果您使用的是jessie新版本,则无需执行此操作。使用以下命令更新系统:

将设备树添加到/boot/config.txt以禁用Raspberry Pi 3蓝牙。

sudo raspi-config


在文件末尾添加

*如果您想将蓝牙更改为微型端口(坏)

sudo apt-get update

sudo apt-get upgrade


*如果要禁用蓝牙(良好)

sudo nano /boot/config.txt


退出编辑器,保存更改。

步骤4-重新启动pi

dtoverlay=pi3-miniuart-bt


步骤5-

a)使用以下命令禁用串行控制台编辑文件:删除单词phase“ console=serial0,115200”或“ console=ttyAMA0,115200

退出并保存更改

b)启用串行控制台,使用

dtoverlay=pi3-disable-bt


将文件更改为以下内容:

sudo reboot


退出并保存您的更改

步骤6-重新启动pi

sudo nano /boot/cmdline.txt


- ----------------仅此而已----------------------------- -

评论


在rpi2上可以正常工作,我已将其连接到蓝牙中继板上,并通过AT命令发送消息。但是我可以通过这种方式从arduino接收数据吗?

– marciokoko
17年6月16日在0:23

#3 楼

Naseer的答案是正确的,但如果您只是讲了最新的阿拉伯语,那么答案会有些复杂。我所需要做的只是在我的config.txt文件中添加以下行(例如,在您插入fat32分区上SD卡的窗口中):

/>然后将其插入,pi会直接在控制台引脚上打印内容。

评论


这怎么工作?蓝牙UART甚至没有连接到GPIO引脚!

–德米特里·格里戈里耶夫(Dmitry Grigoryev)
16年11月15日在15:09

@DmitryGrigoryev它适用于我的PI 3。

– ThN
16年11月29日在15:23

这也对我有用,我发现该线程有助于弄清一些小问题:raspberrypi.org/forums/…

–克里斯
17-10-21在7:31

#4 楼

Raspberry Pi4 UART
Pi4除较旧的Pi上的uart0 / 1外,还具有4个附加UART(uart2-uart5)(由于共享GPIO,只能使用其中一个)。可以连接到uart0上功能齐全的PL011 UART,并且可以选择配置CTS / RTS。
可以启用它们(通过编辑/boot/config.txt),但这需要仔细考虑对GPIO功能的影响。 CTS / RTS功能具有其他影响

uart2使用保留的GPIO0 / 1,可能会影响正常的
Raspbian功能。
uart3使用的GPIO4 / 5可以,尽管GPIO4通常用于其他用途。
uart4使用用于SPI0的GPIO8 / 9。
uart5使用GPIO12 / 13,与gpio-fan的默认引脚分配冲突(尽管这样做可以

如果启用了其他UART,它们将显示为/dev/AMAn
第一个将是/dev/AMA1,如果启用了其他UART,则递增d。
Name:   uart0
Info:   Change the pin usage of uart0
Load:   dtoverlay=uart0,<param>=<val>
Params: txd0_pin                GPIO pin for TXD0 (14, 32 or 36 - default 14)

        rxd0_pin                GPIO pin for RXD0 (15, 33 or 37 - default 15)

        pin_func                Alternative pin function - 4(Alt0) for 14&15,
                                7(Alt3) for 32&33, 6(Alt2) for 36&37


Name:   uart1
Info:   Change the pin usage of uart1
Load:   dtoverlay=uart1,<param>=<val>
Params: txd1_pin                GPIO pin for TXD1 (14, 32 or 40 - default 14)

        rxd1_pin                GPIO pin for RXD1 (15, 33 or 41 - default 15)


Name:   uart2
Info:   Enable uart 2 on GPIOs 0-3
Load:   dtoverlay=uart2,<param>
Params: ctsrts                  Enable CTS/RTS on GPIOs 2-3 (default off)


Name:   uart3
Info:   Enable uart 3 on GPIOs 4-7
Load:   dtoverlay=uart3,<param>
Params: ctsrts                  Enable CTS/RTS on GPIOs 6-7 (default off)


Name:   uart4
Info:   Enable uart 4 on GPIOs 8-11
Load:   dtoverlay=uart4,<param>
Params: ctsrts                  Enable CTS/RTS on GPIOs 10-11 (default off)


Name:   uart5
Info:   Enable uart 5 on GPIOs 12-15
Load:   dtoverlay=uart5,<param>
Params: ctsrts                  Enable CTS/RTS on GPIOs 14-15 (default off)

以下总结了引脚的用法:-
        TXD RXD CTS RTS     Board Pins
uart0   14  15              8   10
uart1   14  15              8   10
uart2   0   1   2   3       27  28  (I2C)
uart3   4   5   6   7       7   29
uart4   8   9   10  11      24  21  (SPI0)
uart5   12  13  14  15      32  33  (gpio-fan)