外设使用

更新历史
日期 版本 作者 更新内容
2023-12-08 v1.0 ztd
  • Release docs

SoC 相关

CPU 运行频率

sudo cat /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_cur_freq

单位为 KHz
注意系统自带温控策略,当系统过于空闲或者温度过高时,都会降频。

PWM

TODO

GPIO

io_map

pin_num

参考上面的两个表格,可以找到要使用的 GPIO 对应的位置和序号,以点亮底板上的两个 LED 灯为例,可以使用命令在用户空间操作对应的 GPIO:

使用前先检查 GPIO 是否被占用

sudo cat /sys/kernel/debug/gpio
num=194
echo ${num} > /sys/class/gpio/export  
echo out > /sys/class/gpio/gpio${num}/direction 
echo 0 > /sys/class/gpio/gpio${num}/value
num=196
echo ${num} > /sys/class/gpio/export  
echo out > /sys/class/gpio/gpio${num}/direction 
echo 0 > /sys/class/gpio/gpio${num}/value

除了上述方法外,还可以通过 C 语言的 libgpiod 库来操作 GPIO,下面仍然以底板上的 LED 灯为例

#include <gpiod.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    int i;
    int ret;

    struct gpiod_chip * chip;
    struct gpiod_line * line;

    chip = gpiod_chip_open("/dev/gpiochip0");
    if(chip == NULL)
    {
        printf("gpiod_chip_open error\n");
        return -1;
    }

    line = gpiod_chip_get_line(chip, 194);
    if(line == NULL)
    {
        printf("gpiod_chip_get_line error\n");
        gpiod_line_release(line);
    }

    ret = gpiod_line_request_output(line,"gpio",0);
    if(ret < 0)
    {
        printf("gpiod_line_request_output error\n");
        gpiod_chip_close(chip);
    }

    for(i = 0; i < 10; i++)
    {
        gpiod_line_set_value(line,1);
        sleep(1);
        gpiod_line_set_value(line,0);
        sleep(1);
    }

    gpiod_line_release(line);
    gpiod_chip_close(chip);

    return 0;
}

首先安装需要的依赖:

sudo apt update
sudo apt install build-essential libgpiod-dev gpiod

编译后,需要使用 root 权限来执行程序:

gcc gpio.c -I /usr/include/ -L /usr/lib/aarch64-linux-gnu/ -lgpiod -o gpio
sudo ./gpio

libgpiod 也提供了一些命令来操作 gpio,常用的命令如下:
gpiodetect:列出所有的 GPIO 控制器

sudo gpiodetect

gpioinfo:列出 GPIO 控制器的引脚情况,可以查看哪些引脚已经被使用

sudo gpioinfo gpiochip0

gpioset:设置 GPIO 引脚的状态

sudo gpioset gpiochip0 196=0

gpioget:获取 GPIO 引脚状态

sudo gpioget gpiochip0 196

UART

系统串口

LonganPi 3H 的系统串口是 UART0,在侧边插针中有引出。

uart_pin

你可以使用 USB 转串口模块连接该串口,即 U0-RXU0-TX,注意交叉连接,以及 GND 连接(下图中还多接了一根供电线,若用 typeC 口供电可以不接这根供电线)。

uart_connect

连接完成后,即可使用串口工具进行通信,Windows 下推荐 XShellmobaterm,Linux下推荐 minicom
设置串口波特率为 115200,即可在串口终端下登录并进行指令操作:

注:刚连接后可以敲几个回车查看是否有反应,如果没有反应则检查接线或者串口配置

一般串口

除系统串口 UART0 外,设备树中也默认使能了 UART1,UART2,UART3,UART4 串口,可以根据需要使用。

查看串口设备

ls /dev/ttyS*

查看串口的波特率等信息

stty -F /dev/ttyS1 -a 

设置串口波特率、数据模式

stty -F /dev/ttyS1 ispeed 115200 ospeed 115200 cs8

查看串口数据

cat /dev/ttyS1

发送串口数据

echo "LonganPi3H" > /dev/ttyS1

其它方法

也可以使用minicom,或者pyserial库进行串口操作,请用户自行查找相关资料使用。若要使用非常见波特率,可以使用picocom

I2C

TODO

SPI

TODO

HDMI 显示

LonganPi 3H 最高支持 4k 分辨率的显示,效果如图所示:

hdmi_connect

若插入 HDMI 显示器后没有显示,可以尝试在命令行中使用 xrandr 来更换显示配置参数。

首先导出 DISPLAY 变量

export DISPLAY=:0.0

然后用 xrandr 查看可用的参数:

sipeed@lpi3h-ce8e:~$ xrandr                                                     
Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 8192 x 8192           
HDMI-1 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 255mm 
x 220mm                                                                         
   1920x1080     60.00*+  60.00    59.94                                        
   1400x1050     59.95                                                          
   1280x1024     75.02    60.02                                                 
   1440x900      59.90                                                          
   1280x960      60.00                                                          
   1152x864      75.00                                                          
   1280x720      60.00    59.94                                                 
   1024x768      75.03    70.07    60.00                                        
   832x624       74.55                                                          
   800x600       72.19    75.00    60.32    56.25                               
   640x480       75.00    72.81    66.67    60.00    59.94                      
   720x400       70.08                                                          

根据上述命令的输出,我们可以尝试更换分辨率,帧率等配置,比如更换为 1440x900 分辨率:

xrandr xrandr --output HDMI-1 --mode 1440x900

有些参数可能会导致屏幕不亮,遇到插入 HDMI 显示器无显示时,可以用这个命令来调整至能亮的显示参数,也可以在系统设置中的 Dispaly 图形化菜单中调节。

若发现使用较高分辨率时有闪屏问题,可以尝试在图形化的设置显示的菜单中降低刷新率。

HDMI 音频

TODO

GPU

TODO

其它

欢迎投稿~ 投稿接受后可得¥5~150($1~20)优惠券!