20250322在荣品的PRO-RK3566开发板的buildroot系统下使用内置命令测试UART1

root@rk3566-buildroot:/# udevadm info /dev/ttyS1
root@rk3566-buildroot:/# stty -F /dev/ttyS1
root@rk3566-buildroot:/# stty -F /dev/ttyS1
root@rk3566-buildroot:/# stty -F /dev/ttyS1 raw 115200 cs8 -parenb -cstopb
root@rk3566-buildroot:/# stty -F /dev/ttyS1
root@rk3566-buildroot:/# echo "hello" >> /dev/ttyS1
root@rk3566-buildroot:/# cat /dev/ttyS1

./uart_test /dev/ttyS1 115200 8 0 1


20250322在荣品的PRO-RK3566开发板的buildroot系统下使用内置命令测试UART1
2025/3/22 11:14


./uart_test /dev/ttyS1 115200 8 0 1


20250321在荣品的PRO-RK3566开发板的buildroot系统下使用UART1
2025/3/21 17:27


缘起:需要在荣品的PRO-RK3566开发板/产品的buildroot系统下使用UART1。
根据DTS文件,很容易知道UART被被用作AP6256的UART1接口了。直接全部屏蔽掉。


@余顺?我司RK3566的buildroot项目不需要WIFI/BT AP6256,请问如何彻底关闭?
BT用的UART1用作 通讯用。直接关闭AP6256以免潜在的隐患

可以 通过./build.sh kernle-config 查看对应的驱动是否是在内核加载的
要从根源上禁止掉,启动的加载系统的时候是否有insmod bcmdhd.ko,可以找这个etc下的脚本,或wlan 相关的脚本


代码修改的部分:
Z:\source\kernel\arch\arm64\boot\dts\rockchip\rk356x\pro-rk3566.dts

&i2c1 {
    status = "okay";
};

&i2c4 {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&i2c4m1_xfer>;

        rtc@51 {
                status = "okay";
                compatible = "rtc,hym8563";
                reg = <0x51>;
        };
};


&usbdrd_dwc3 {
    dr_mode = "host";
    extcon = <&usb2phy0>;
    status = "okay";
};

&uart1 {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&uart1m0_xfer>;
};

&uart3 {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&uart3m0_xfer>;
};

&uart6 {
        status = "okay";
        pinctrl-names = "default";
        pinctrl-0 = <&uart6m0_xfer>;
};

&uart7 {
        status = "okay";
        pinctrl-names = "default";
        pinctrl-0 = <&uart7m0_xfer>;
};

&uart9 {
        status = "okay";
        pinctrl-names = "default";
        pinctrl-0 = <&uart9m0_xfer>;
};

&spi1 {
    status = "okay";

    spi1_dev@0 {
        compatible = "rockchip,spidev";
        reg = <0>;
        spi-max-frequency = <12000000>;
        spi-lsb-first;
    };

};


&sdmmc2 {
    max-frequency = <150000000>;
    supports-sdio;
    bus-width = <4>;
    disable-wp;
    cap-sd-highspeed;
    cap-sdio-irq;
    keep-power-in-suspend;
    mmc-pwrseq = <&sdio_pwrseq>;
    non-removable;
    pinctrl-names = "default";
    pinctrl-0 = <&sdmmc2m0_bus4 &sdmmc2m0_cmd &sdmmc2m0_clk>;
    sd-uhs-sdr104;
    status = "okay";
};

//&uart1 {
//    status = "okay";
//    pinctrl-names = "default";
//    pinctrl-0 = <&uart1m1_xfer &uart1m1_ctsn>;
//};


//&wireless_bluetooth {
//    uart_rts_gpios = <&gpio4 RK_PB6 GPIO_ACTIVE_LOW>;
//    pinctrl-names = "default", "rts_gpio";
//    pinctrl-0 = <&uart1m1_rtsn>;
//    pinctrl-1 = <&uart1_gpios>;
//    BT,reset_gpio    = <&gpio4 RK_PA5 GPIO_ACTIVE_HIGH>;
//    BT,wake_gpio     = <&gpio4 RK_PA6 GPIO_ACTIVE_HIGH>;
//    BT,wake_host_irq = <&gpio4 RK_PB1 GPIO_ACTIVE_HIGH>;
//    status = "okay";
//};

&wireless_wlan {
    pinctrl-names = "default";
    pinctrl-0 = <&wifi_host_wake_irq>;
    WIFI,host_wake_irq = <&gpio3 RK_PD4 GPIO_ACTIVE_HIGH>;
};


        
&rk_headset {
        status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&hp_det>;
    headset_gpio = <&gpio3 RK_PA1 GPIO_ACTIVE_HIGH>;
    };

&pinctrl {
    rp-pins {
        rp_bat_pins: rp-bat-pins {
            rockchip,pins =
                <0 RK_PC7 RK_FUNC_GPIO &pcfg_pull_up>,
                <0 RK_PC5 RK_FUNC_GPIO &pcfg_pull_none>;
        };
    };
    
    
    headphone {
        hp_det: hp-det {
            rockchip,pins = <3 RK_PA1 RK_FUNC_GPIO &pcfg_pull_down>;
        };
    };

    
    wireless-wlan {
        wifi_host_wake_irq: wifi-host-wake-irq {
            rockchip,pins = <3 RK_PD4 RK_FUNC_GPIO &pcfg_pull_down>;
        };
    };

    //wireless-bluetooth {
    //    uart1_gpios: uart1-gpios {
    //        rockchip,pins = <4 RK_PB6 RK_FUNC_GPIO &pcfg_pull_none>;
    //    };
    //};
};

&rk809_codec {
    mic-in-differential;
};


确认GPIO口的状态:
pin 75 (gpio2-11): (MUX UNCLAIMED) gpio2:75
pin 76 (gpio2-12): (MUX UNCLAIMED) (GPIO UNCLAIMED)

pin 126 (gpio3-30): fe650000.serial (GPIO UNCLAIMED) function uart1 group uart1m1-xfer
pin 127 (gpio3-31): fe650000.serial (GPIO UNCLAIMED) function uart1 group uart1m1-xfer


pin 75 (gpio2-11): fe650000.serial gpio2:75 function uart1 group uart1m0-xfer
pin 76 (gpio2-12): fe650000.serial (GPIO UNCLAIMED) function uart1 group uart1m0-xfer

pin 126 (gpio3-30): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 127 (gpio3-31): (MUX UNCLAIMED) (GPIO UNCLAIMED)


2.测试串口
2.1 节点配置好后,烧录运行,一般会在/dev/下面看到类似ttyS0,ttyS1等设备文件,它对应的就是uart0,查看串口信息:
udevadm info /dev/ttyS1

通过上面命令,可以看到如下串口信息,注意地址,它与uart在dtsi中定义的地址对应,比如下面ttyS0地址对应uart0的0xfdd50000


2.2 串口波特率

stty -F /dev/ttyS1  查看波特率
stty -F /dev/ttyS1 raw 115200 cs8 -parenb -cstopb      设置波特率为115200


stty命令
1. 串口配置
stty -F /dev/ttyS1 raw 115200 cs8 -parenb -cstopb

/dev/ttyS1 :串口文件描述符
115200 :波特率为115200
cs8 :数据位8位
-parenb :无校验位
-cstopb :1位停止位
raw:显示原始值,不进行转义。如果不加raw的话,从串口发送数据到设备,shell不能显示。

stty --help帮助文档:


N :set the input and output speeds to N bauds
设置波特率为N,例如9600 4800


csN: set character size to N bits, N in [5…8]
设置数据位为N,例如cs8 ,cs7

[-]cstopb:use two stop bits per character (one with ‘-’)
设置停止位:
cstopb:2位停止位
-cstopb:1位停止位

[-]parenb:generate parity bit in output and expect parity bit in input( 在输出中产生奇偶校验位,并要求在输入中也有奇偶校验位 )
parenb使终端进行奇偶校验,-parenb则是禁止校验
-parenb:无校验位

[-]parodd:set odd parity (or even parity with ‘-’)
parenb parodd:奇校验
parenb -parodd:偶校验


2.3 linux命令对串口读写

cat /dev/ttyS1   读取串口收到的信息
echo "hello" >> /dev/ttyS1 向串口发送信息 

3. python脚本测试串口
3.1 要向自动测试串口,使用python是一个不错的选择,需要安装python3串口支持:

sudo apt install python3-serial


完整的LOG:

root@rk3566-buildroot:/# 
root@rk3566-buildroot:/# udevadm info /dev/ttyS1
P: /devices/platform/fe650000.serial/tty/ttyS1
N: ttyS1
E: DEVNAME=/dev/ttyS1
E: DEVPATH=/devices/platform/fe650000.serial/tty/ttyS1
E: MAJOR=4
E: MINOR=65
E: SUBSYSTEM=tty

root@rk3566-buildroot:/# 
root@rk3566-buildroot:/# stty -F /dev/ttyS1
[  238.797615] of_dma_request_slave_channel: dma-names property of node '/serial@fe650000' missing or empty
speed 9600 baud; line = 0;
[  238.797674] dw-apb-uart fe650000.serial: failed to request DMA, use interrupt mode
-brkint -imaxbel
root@rk3566-buildroot:/# 
root@rk3566-buildroot:/# stty -F /dev/ttyS1
speed 9600 baud; line = 0;
-brkint -imaxbel
root@rk3566-buildroot:/# 
root@rk3566-buildroot:/# stty -F /dev/ttyS1 raw 115200 cs8 -parenb -cstopb
root@rk3566-buildroot:/# 
root@rk3566-buildroot:/# stty -F /dev/ttyS1
speed 115200 baud; line = 0;
min = 1; time = 0;
-brkint -icrnl -imaxbel
-opost
-isig -icanon
root@rk3566-buildroot:/# 
root@rk3566-buildroot:/# echo "hello" >> /dev/ttyS1
root@rk3566-buildroot:/# 
root@rk3566-buildroot:/# cat /dev/ttyS1

5aA*E5aA*E^C
root@rk3566-buildroot:/# 


hello
5aA*E
5aA*E

35 61 41 2A 45 
5aA*E


参考资料:
https://blog.youkuaiyun.com/weixin_42098934/article/details/143893131
RK356x-10:串口(uart)配置与调试


https://zhuanlan.zhihu.com/p/644415360
瑞芯微Core 3566系列:使用UART


https://blog.youkuaiyun.com/luotuo28/article/details/125896180
Linux串口调试总结

内容概要:FS70系列显微镜是一款高功率、符合人体工程学设计的半导体检测显微镜。该系列显微镜采用Mitutoyo无限远校正光学系统和Siedentopf设计的三目镜筒,配备10倍广角目镜(视场数为24),提供四种主要机型:标准型、带变焦功能的非激光型、适用于三种YAG激光波长的型号以及适用于两种波长范围的型号。其物镜放大倍率从1倍到200倍不等,支持长工作距离平场消色差物镜、激光切割物镜以及红外、近红外、紫外和近紫外应用的长工作距离物镜。此外,还提供了微分干涉对比选项(仅限非激光配置)、可选的电动四孔中心调节目镜以及六英尺遥控光强控制。所有型号均具有同心粗调和微调聚焦轮,提供50毫米行程范围,微调精度达0.1毫米/转。 适合人群:从事半导体行业及相关领域的技术人员、研究人员和质量控制人员。 使用场景及目标:①用于半导体晶圆、芯片和其他微小元件的高精度检测;②适用于科研实验室进行材料微观结构分析;③支持工业生产中的产品质量检验与故障排查。 阅读建议:本资料详细介绍了FS70系列显微镜的技术参数和特点,建议使用者根据具体应用场景选择合适的配置,并参考提供的配件选项来优化观测效果。同时,在操作过程中应注意安全事项,特别是涉及激光应用时需遵循相关法规要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值