2017/9/27

reading notes : uarts in raspberry pi 3

ref:
PI 3 因為BT 的關係,所以原來的 uart console 被拿去給 bt 用了,
所以有一堆..

PI3 有兩個 uart:
  • PL011 : /dev/ttyAMA0 -- BT
  • mini UART : /dev/ttyS0 --console
Primary Console : /dev/serial0 是被指定給 console 用的,
所以指定 誰是 /dev/serial0,誰就會變 console。

miniUART 有些問題。
他的 baurate 是從 VPU 的 clk 除的。
所以跟 VPU 的頻率相關。
當使用 dvfs時,VPU 的頻率是會變的,有時候甚至會關閉,
這樣就導致 miniUART 的 baudrate 無法固定,關閉時甚至無法是用。

可以在 config.txt 中加上 enable_uart=1
這樣,VPU 的 core_freq 就會固定 250MHz,
如果加上 force_turbo 就會固定 400MHz。

enable_uart 只跟 miniUART 有關,不會影響到 PL011

UART 和 GPIO

pi 的 kernel 是用 devicetree overlay 來處理不同 device tree 配置問題。
有兩個:
  • pi3-disable-bt : 這個會 關掉 ttyAMA0,並且把 tx, rx 接到 GPIO 14, 15 pin 上
  • pi3-miniuart-bt : 這個會讓 bt 使用 miniuart (ttyS0),一樣把 ttyAMA0 的 tx, rx 接到 GPIO 14, 15 pin 上
所以簡單(不用bt)的作法,就是在 boot/config.txt 加上
dtoverlay=pi3-disable-bt
就可以用 最旁邊的第3(GND), 4(TX), 5(RX) 做 console uart 了。


在 yocto project 中
在自己增加的 layer 中...
recipes-bsp/bootfiles/rpi-config_git.bbappend:
SRCREV = "648ffc470824c43eb0d16c485f4c24816b32cd6f"

do_deploy_append() {
    if [ -n "${ENABLE_RPI3_SERIAL_CONSOLE}" ]; then
        echo "" >> ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
        echo "## Disable RPi3 bluetooth to enable serial console on UART0" >> ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
        echo "dtoverlay=pi3-disable-bt" >> ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
    fi
}

沒有留言:

張貼留言