radxa-rock5c-开发笔记

2024/07/27

Tags: Radxa Rock5C NVME UART

Table of Contents

1. 从NVME 启动系统

从官方的文档上看rock5c, 你会有一种看山跑死马的感觉, 因为它在一本正经的胡说八道

怀疑它只是把rock 5b或5a的文档复制过来改一一改

按他们文档上刷nvme的文档,你将永远不可能成功, 因为rock 5c 从emmc或nvme启动,只能二选一

因为pin脚不够用.但是他们文档上没有指出这点, 截止2024-07-27

如果不想买额外的模块,又想从nvme启动系统,唯的一选项是 把系统刷到 sd中,

这里sd卡中有三个分区

然后把sd卡的 第二个分区和第三个分区格式化后,这样当sd卡中的bootloader找不到系统,会尝试从pcie启动

前提是系统已经识别到nvme设备

1
$lsblk #查看是否有nvme设备

格式化可以把sd加载到linux,使用fdisk

1
2
3
4
5
6
$lsblk  #查看是否正常识别sd卡设备
$fdisk /dev/sdc #进入交互式cli
d 2 #删除第二分区
d 3 #删除第三分区
w  #保存
q #退出

然后把官网下载的镜像烧录到m2, 接入rock5c

启动后应该可以看到系统挂载在nvme

1
df -h

可以买容量比较小的sd卡, 10元以内的, 烧录系统失败也没关系,因第一个分区应该还是成功的,失败了应该不影响使用sd卡作为bootload

这样比较经济实惠

2. 开机不自动WIFI

关闭 钱包服务

kwalletmanager中禁用掉

把wireless网络删除,重新创建 无线连接

设置固定ip地址 为wifi生成一个随机的mac (radxa估计没有买mac地址,所以没有mac地址导致dhcp服务器不会缓存,每次重新开机都是新的ip,真是满满的惊喜)

需要在/config/config.txt中设置

1
connect_wi-fi YOUR_WIFI_SSID YOUR_WIFI_PASSWORD

如果 是刚刚完系统,可能会有一个before.txt, 也在里面加

3 . ssh服务不自动启动

1
sudo systemctl enable ssh

4. UART

sudo rsetp 中选择overlays 选择manager 后,进入选择想要的uart,再选择ok, 就会配置对应的uart 然后再选择一下rebuild overlays

如果想确认uart对应的pin脚是哪个, 可以看官方的文档中的硬件目录中的一个表格

也可以在 rsetup中 overlays目录选择一个 view indo的选项, 选择想查看的功能后,Ok,会逐个显示其pin脚信息

强烈推荐使用 ttys2 ttyS4 ttyS6 (也就是配置界面中前3个uart)

理由: ttys2, ttys4 和 raspberry pi 5 的pin脚是兼容的, ttyS6则可以配置为调试用的串口

1
2
3
4
5
6
7
8
sudo rsetup

#树莓派5
#uart0管脚8,10
#uart2管脚7,29
#与rock5c的uart2-m0和uart4-m2 管脚号一样
#uart6-m1主要用作调试用
#所以开这三个串口

image-20240723190240441

ok后, 到同上级菜单选择重新编译,然后重启

重启后会多出三个串口ttyS2 ttyS4 ttyS6

image-20240723190409492

2,4和树莓派串口的40pin 管脚号可以兼容,6不兼容, 所以把6作为调试用的串口,顺便把波特率改为和树莓派兼容的115200

默认的1500000 太非主流了

image-20240723190836587

修改完执行

1
 sudo u-boot-update

Rock5/hardware/5b/gpio - Radxa Wiki

overlays/arch/arm64/boot/dts/rockchip/overlays/rk3588-fiq-debugger-uart2m2.dts at main · radxa/overlays (github.com)

Rock5/guide/hardware-configuration - Radxa Wiki

Rsetup | Radxa Docs

硬件接口说明 | Radxa Docs

4.1 测试uart的脚本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# 测试脚本 tst.py
import serial
import argparse
import threading
import time
from datetime import datetime

def send_data(ser):
    while True:
        current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        ser.write(current_time.encode())
        print("Sent: {}".format(current_time))
        time.sleep(5)  # 每5秒发送一次

def receive_data(ser):
    while True:
        if ser.in_waiting > 0:
            received_data = ser.readline().decode().strip()
            print("Received: {}".format(received_data))

def main():
    parser = argparse.ArgumentParser(description="Serial port listener and responder")
    parser.add_argument('--port', type=str, required=True, help='Serial port to use, e.g., /dev/ttyUSB0 or COM3')
    parser.add_argument('--baudrate', type=int, required=True, help='Baud rate for the serial communication')
    args = parser.parse_args()

    try:
        with serial.Serial(args.port, args.baudrate, timeout=1) as ser:
            print("Listening on {} at {} baud.".format(args.port,args.baudrate))

            # 创建发送和接收线程
            send_thread = threading.Thread(target=send_data, args=(ser,))
            receive_thread = threading.Thread(target=receive_data, args=(ser,))

            # 启动线程
            send_thread.start()
            receive_thread.start()

            # 确保主线程不会提前结束
            send_thread.join()
            receive_thread.join()

    except serial.SerialException as e:
        print("Error: {}".format(e))

if __name__ == "__main__":
    main()
1
2
3
4
python -m venv test # 创建一个名为test的python虚拟环境
cd test
source bin/active # 激活python虚拟环境
python -m pip install pyserial  #安装 py的串口库, 测试脚本会使用这个库

测试脚本用法:

如果当前用户没有在dialout用户组先添加进去,否则将没有使用/dev/tts 的权限

1
2
3
4
$sudo usermod  dialout $USER
#需要重启登录一下才生效
#可以用groups 来确认是不是有在这个权限组
$goups

,在激活python虚拟环境后,

1
sudo chmod +x ./tst.py --port /dev/ttyS2 --baudrate 115200

5 . GPIO

可以参考我的博客中raspberry pi 5的gpio部分,都是使用 gpiod,

唯一需要注意的是, raspberry pi 5 40 pin脚上的gpio都是来自gpio chip 4

rock 5c 则是把多个chip 上的pin脚都引到40 pins上面了

还有一个转换规则,

rock 5c 中每个chip 的32pin被分为abcd4组 每组8个Pin

例如 radxa系统中的GPIO3_B2 对应 gpiod中的 gpio chip1 11 line

>> Home

Comments