LicheeRV-Nano教程

】板卡介绍

一、简介

LicheeRV Nano 是一款迷你尺寸的开发板(仅22.86*35.56mm),搭载算能SG2002处理器,大核1GHZ (RISC-V/ARM可选)小核700MHZ RISC-V,256MB DDR3内存,内置 1Tops NPU;板载MIPI-CSI、MIPI-DSI、SDIO、ETH、USB、SPI、UART、I2C等丰富的接口,可扩展多种多样的应用;直插/半孔设计,方便量产贴片。


二、参数

项目参数
CPU算能 SG2002;
大核:1GHz RISC-V C906 / ARM A53 二选一;
小核:700MHz RISC-V C906;
低功耗核:25~300M 8051
NPU1TOPS INT8,支持 BF16
内存内封 2Gbit (256MByte) DDR3
存储TF卡 / SD NAND 二选一启动 (SD NAND 焊盘在 TF 卡槽下)
视频接口视频输出:2 lane MIPI DSI 输出,标准 31pin 接口,支持 6pin 电容触摸屏
视频输入: 4 lane MIPI CSI 输入,22Pin 接口,支持拆分双路 CSI
音频接口音频输出: 板载PA功放,可在排针上直接连接1W以内的喇叭
音频输入: 板载模拟硅麦,可直接收音
有线连接E 后缀版本支持百兆 RJ45 连接器
无线连接W 后缀版本支持 2.4G / 5.8G 双频 WiFi6 + BLE5.4
USB1 x USB2.0 OTG Type-C
IO接口2 x 14pin 2.54 插针接口,间距 800mil,可直插面包板
按键1 x RST 按键 + 1 x BOOT 按键
指示灯1 x 电源 LED,1 x 用户 LED
操作系统Buildroot Linux / Debian
尺寸22.86*35.56mm


三、版本对比

配置基础系统麦克风/扬声器以太网WiFi6/BT5
LicheeRV-Nano-BYYNN
LicheeRV-Nano-EYYYN
LicheeRV-Nano-WYYNY
LicheeRV-Nano-WEYYYY

四、硬件资料

规格书、原理图、尺寸图等均可在这里找到:点击这里

五、软件资料

六、算能资料汇总

七、版本区分

LicheeRV Nano 先后生产两个版本的硬件,分别为内测版(PCB识别号:70405),量产版(70415)。两者外观和性能上存在些许差异

  1. 4*0201电阻修改为0402排阻,方便焊接;
  2. WiFi模组更换为有屏蔽罩的版本;
  3. 增大电源处电容规格,提升电源质量;
  4. 移动两颗电容到TF卡下,支撑TF卡,方便用户拔插;
  5. 用丝印明确标出电阻位置,方便用户修改;
  6. 标明PCB版本号。

八、注意事项

  • 内测版硬件(70405)NPU 仅支持工作在0.5T下,1.0T下运行不保证板卡运行的稳定性
  • 内测版硬件(70405)的WIFI尚未完善匹配,速率较低,敬请谅解
  • 若购买摄像头配件或WE版本套餐,包装内随附螺丝、焊接铜柱和螺丝刀,为避免焊接时烫伤,请参照摄像头、WE网口小板安装指南
  • 若购买3寸、4寸、10.1寸屏幕配件,包装内随附屏幕转接板以及排线,请参照屏幕安装指南
  • 内测版WiFi模块旁有两颗电容距离较近,生产时存在贴合的可能,因引脚网络相同,无需担心短路问题


】开箱体验

一、LicheeRV Nano 套餐介绍

LicheeRV Nano根据网络分为四个版本:

  • 标准版(B)无网络配件

  • 网口版(E)板载100M网口

  • WiFi版(W)板载WiFi6/BT5.2模块,BT5.2功能默认不启用,如需使用蓝牙功能,需要贴此处4颗0201电阻或使用2B铅笔填涂短接


    注:70415及以上版本可使用0402*4的排阻短接


  • WiFi网口版(WE)板载WiFi6/BT5.2模块,同时提供一个网口小板,通过铜柱与排线连接到开发板上

同时我们提供以下六种配件:

  • 摄像头

    该摄像头(3754)左右螺丝固定孔不短路,铜柱推荐固定到第5个焊盘上

  • 3寸屏幕

    屏幕分辨率为480*845,带触摸;包装附赠屏幕触摸转接板和排线

  • 5寸屏幕

    屏幕分辨率为480*845,不带触摸;排线可直接连接到LicheeRV Nano 31Pin屏幕接口上

  • 7寸屏幕

    屏幕分辨率为800*1280,带触摸;排线可直接连接到LicheeRV Nano 31Pin屏幕接口和6Pin触摸接口上

  • 10寸屏幕

    屏幕分辨率为800*1280,带触摸;包装附赠触摸转接板和排线,屏幕排线可直接连接到LicheeRV Nano 31Pin屏幕接口

二、安装指南

2.1. WE小板的安装

  • 焊接排线

    1. 按照下图方向焊接排线


    2. 使用万用表检测通断


  • 固定铜柱

    1. 为避免焊接铜柱时烫手,可以先将将铜柱拧到网口小板上

    2. 将铜柱插入第5个焊盘,可以提前在焊盘上涂抹锡膏,提升焊接后铜柱的稳定性

    3. 在底部使用电烙铁焊接

  • 组装

    1. 将排线接入网口小板的FPC座子,并锁紧

    2. 用螺丝将网口小板固定到铜柱上

2.2. 摄像头的安装

  • 固定铜柱

    1. 与上面固定方法类似:先将铜柱和螺丝拧到摄像头模组上

    2. 将铜柱插入第5个焊盘,可以提前在焊盘上涂抹锡膏,提升焊接后铜柱的稳定性

    3. 在底部使用电烙铁焊接

  • 组装

    1. 根据下图连接摄像头排线


    2. 螺丝固定

2.3. 屏幕的安装

  • 3寸屏幕安装


  • 5寸屏幕安装


  • 7寸屏幕安装


三、大核作为A53模式启动

LicheeRV Nano的大核支持作为RISC-V(C906)或ARM(A53)启动,在开发板背面,SG2002芯片旁边有丝印圈出的短接电阻,如下图所示,默认贴在C906(RISC-V)一侧


若大核需要作为ARM启动,需要将该电阻挪至另外一边,如下图


需注意,目前A53模式下的SDK视频编解码存在问题,测试镜像点击这里下载

四、屏幕背光

LicheeRV Nano适配不同尺寸的屏幕,其中3寸、2.3寸为单串LED;5寸为双串LED;7寸、10.1寸为四串LED。


如上图背光电阻默认使用两个10R 0201并联,适配5寸屏幕;
接入2.8/3寸屏幕会明显发烫,内测版70405需拆掉BL电阻(下图位置),70415及后续版本可通过PWM自动适配小尺寸屏幕;
接入7/10.1寸屏幕时屏幕略暗,若需达到100%亮度,要将该电阻修改为3.3R

五、电池应用

LicheeRV Nano 上不包含锂电池充电电路,如果用户需要嵌入电池,同时希望使用 RV Nano 自带的 USB TypeC 充电,则需要断开VBUS与VSYS的电阻(下图位置),VBUS接口作为PMU的外部电源输入,VSYS接口连接PMU的VSYS。如有疑问,请联系我们获得支持


】镜像集合

一、镜像格式

镜像使用xz/lz4进行压缩,解压后使用rufs/win32diskimager/dd工具写入到SD卡

二、基于官方SDK的镜像

下载地址


】烧录镜像

一、镜像格式

镜像使用xz进行压缩,解压后使用rufs/win32diskimager/dd工具写入到SD卡

二、Linux

# 将sdX替换为SD卡的节点
dd if=xxx.img of=/dev/sdX conv=sync

三、Windows

使用7zip工具进行解压:

https://www.7-zip.org/download.html

使用 rufs/win32diskiamger 写入到SD卡

https://rufus.ie/

https://sourceforge.net/projects/win32diskimager/


】外设使用

一、连接开发板

1.1. UART0

将UART串口连接到板子的 GNDA16(TX)A17(RX)

然后使用终端软件连接串口,波特率115200

在USB接口上的SBU1/2上也引出了UART0,可使用USB TypeC转接板引出RX0、TX0

1.1.1. 禁止 UART0 输出日志

首先将用户空间的输出转到别的tty设备上:

#include <stdlib.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <fcntl.h>

int main(int argc, char *argv[]) {
        int fd;
        if (argc < 2) {
                fprintf(stderr, "usage: %s /dev/ttyX\n", argv[0]);
                exit(EXIT_FAILURE);
        }
        fd = open(argv[1], O_RDWR);
        if (fd < 0) {
                perror("open");
                exit(EXIT_FAILURE);
        }
        ioctl(fd, TIOCCONS);
        close(fd);
        exit(EXIT_SUCCESS);
}
riscv64-unknown-linux-gcc tioccons.c -o tioccons
./tioccons /dev/tty2 # 将/dev/console转接到tty2上

然后设置内核日志等级:

echo 0 > /proc/sys/kernel/printk

测试方法:

echo userspace > /dev/console
echo kernel > /dev/kmsg

另一种方法是在/boot/uEnv.txt中加入以下内容将console换到别的tty上:

consoledev=/dev/ttyX

1.2. UART1 UART2 UART3

UART1和2的引脚默认用作连接UART蓝牙芯片:

mmio_write_32(0x03001070, 0x1); // GPIOA 28 UART1 TX
mmio_write_32(0x03001074, 0x1); // GPIOA 29 UART1 RX
mmio_write_32(0x03001068, 0x4); // GPIOA 18 UART1 CTS
mmio_write_32(0x03001064, 0x4); // GPIOA 19 UART1 RTS

如果只想使用UART1,则不需要更改PINMUX,只需要连接 GPIOA28 GPIOA29

如果想要同时使用UART1和UART2的功能,则需要写入寄存器来设置引脚的PINMUX:

在Linux用户空间可以使用devmem工具来写入寄存器

shell:

devmem 0x03001070 32 0x2 # GPIOA 28 UART2 TX
devmem 0x03001074 32 0x2 # GPIOA 29 UART2 RX
devmem 0x03001068 32 0x6 # GPIOA 18 UART1 RX
devmem 0x03001064 32 0x6 # GPIOA 19 UART1 TX

UART3 的引脚被默认复用为SDIO:

mmio_write_32(0x030010D0, 0x0); // D3
mmio_write_32(0x030010D4, 0x0); // D2
mmio_write_32(0x030010D8, 0x0); // D1
mmio_write_32(0x030010DC, 0x0); // D0
mmio_write_32(0x030010E0, 0x0); // CMD
mmio_write_32(0x030010E4, 0x0); // CLK

如果想要使用UART3的功能,则需要写入寄存器来设置引脚的PINMUX:

在Linux用户空间可以使用devmem工具来写入寄存器

shell:

devmem 0x030010D0 32 0x5 # GPIOP 18 UART3 CTS
devmem 0x030010D4 32 0x5 # GPIOP 19 UART3 TX
devmem 0x030010D8 32 0x5 # GPIOP 20 UART3 RX
devmem 0x030010DC 32 0x5 # GPIOP 21 UART3 RTS

Linux系统中的串口使用:

C:

/* TODO */

shell:

stty -F /dev/ttyS1 115200 # 设置UART1波特率为115200
stty -F /dev/ttyS1 raw    # 设置tty为RAW模式
echo -n UUU > /dev/ttyS1 # 发送 UUU(0x55 0x55 0x55)
hexdump -C /dev/ttyS1     # 以HEX格式显示收到的数据

1.3. usb rndis 网口

将板子的usb typec口连接到电脑时会提供一个usb rndis网卡设备(linux gadget 提供)

PC会使用DHCP自动获取地址

将自动获取的IPv4地址最后一位换成1即是板子的IPv4地址:

10.44.55.66 PC机的IPv4地址
10.44.55.1  板子的IPv4地址

然后使用 ssh root@板子的IP地址进行连接:

用户名: root
密码: root

Windows 系统下,需要进行一些配置。

打开设备管理器,找到下面的选项:


选择更新驱动程序。

选择浏览我的电脑以查找驱动程序。

选择让我从计算机上的可用驱动程序列表中选取。

在设备类型列表中选择网络适配器。

厂商选择 Microsoft,型号选择远程NDIS兼容设备。

若弹出这个警告请点击确定。

然后可在设备管理器中的网络适配器列表下找到远程NDIS兼容设备项。

1.4. 网线连接

将网线连接到板子,板子开机时会使用DHCP自动获取地址

板子镜像默认启用了MDNS服务

使用命令:

avahi-browse -art | grep licheervnano

列出广播域中域名带有的licheervrvnano的设备

然后使用:

ssh root@licheervnano-XXXX.local

连接板子

二、SOC相关

查看SOC温度:

cat /sys/class/thermal/thermal_zone0/temp

查看SOC时钟:

cat /sys/kernel/debug/clk/clk_summary

三、USB

3.1. device

在sd卡第一个分区创建 usb.dev 文件,并且删掉 usb.host 文件:

touch /boot/usb.dev
rm /boot/host.host

如果需要启用acm虚拟串口:

touch /boot/usb.GS0

如果需要启用rndis虚拟网卡:

touch /boot/usb.rndis0

然后重启设备

3.2. host

在sd卡第一个分区创建 usb.host 文件,并且删掉 usb.dev 文件:

touch /boot/usb.host
rm /boot/usb.dev

然后重启设备,给排针的VBUS或VSYS供5V电源,连接设备到TYPEC口,在系统内使用lsusb检查设备是否连接

四、PWM

4.1. 引脚复用

PWM的引脚默认被用作UART,如果想用作PWM,则需要设置寄存器:

devmem 0x03001064 32 2 # GPIOA19 PWM7
devmem 0x03001068 32 2 # GPIOA18 PWM6

4.2. SYSFS方式操纵PWM

# 如何获取PWM节点的位置:
# SG2002有4个pwm chip:
# pwmchip0 pwmchip4 pwmchip8 pwmchip12
# 每个chip里面有4路pwm
# 假设我们要使用pwm7:
# 4 < 7 < 8
# PWM7在pwmchip4中
cd /sys/class/pwm/pwmchip4/
# 7 - 4 = 3
echo 3 > export
cd pwm3
# 设置period
echo 10000 > period
# 设置duty_cycle
echo 5000 > duty_cycle
# 使能pwm输出
echo 1 > enable
# 然后使用逻辑分析仪接到PWM引脚,就可以看到PWM7引脚输出方波

五、Audio

licheerv nano 支持录音和播放,使用标准 ALSA 工具可以进行录音、播放等操作。

5.1. 录音

首先设置麦克风音量,范围:0-24

amixer -Dhw:0 cset name='ADC Capture Volume' 24

如果没有找到amixer工具,也可以使用alsamixer(tui)

设置完成后开始录音:

arecord -Dhw:0,0 -d 3 -r 48000 -f S16_LE -t wav test.wav & > /dev/null &

5.2. 播放

./aplay -D hw:1,0 -f S16_LE test.wav

六、GPIO

6.1. LicheeRV Nano引脚图&Linux GPIO编号:


系统内GPIO查看:

cat /sys/kernel/debug/gpio

6.2. GPIO操作

首先用 'devmem 0x0300xxxx 32 0xxx' 修改引脚的PINMUX到GPIO

寄存器查找方式(以A22为例):在此处下载SG2002寄存器手册,手册中查找XGPIOA[22],在表格中对应到GPIO,shell命令: 'devmem 0x03001050 32 0x03'

# xxx 为上图中Linux GPIO NUM,如A22:num=502
num=xxx
echo ${num} > /sys/class/gpio/export  
# GPIO 写
echo out > /sys/class/gpio/gpio${num}/direction 
echo 1 > /sys/class/gpio/gpio${num}/value  
echo 0 > /sys/class/gpio/gpio${num}/value
# GPIO 读
echo in > /sys/class/gpio/gpio${num}/direction 
cat /sys/class/gpio/gpio${num}/value

带WiFI模块的版本 GPIO P18 ~ P23 连接 WiFi 模块的 SDIO 接口,用于 WiFi 通信;GPIO A26 用作 WiFi EN,请避免使用这些引脚,普通版和仅网口版用户可自由定义这些引脚功能

GPIO A18、A19、A28、A29 由一颗0402*4排阻连接至WiFi模块的蓝牙接口,默认空贴,WiFi版用户可自由定义这些引脚的功能,若想启用蓝牙,请参照此处焊接对应电阻

七、UART

7.1. UART1/2

UART1和2的引脚默认用作连接UART蓝牙芯片:

mmio_write_32(0x03001070, 0x1); // GPIOA 28 UART1 TX
mmio_write_32(0x03001074, 0x1); // GPIOA 29 UART1 RX
mmio_write_32(0x03001068, 0x4); // GPIOA 18 UART1 CTS
mmio_write_32(0x03001064, 0x4); // GPIOA 19 UART1 RTS

如果想要同时使用UART1和UART2的功能,则需要写入寄存器来设置引脚的PINMUX:

在Linux用户空间可以使用devmem工具来写入寄存器

shell:

devmem 0x03001070 32 0x2 # GPIOA 28 UART2 TX
devmem 0x03001074 32 0x2 # GPIOA 29 UART2 RX
devmem 0x03001068 32 0x6 # GPIOA 18 UART1 RX
devmem 0x03001064 32 0x6 # GPIOA 19 UART1 TX

7.2. UART3

UART3 的引脚被默认复用为SDIO:

mmio_write_32(0x030010D0, 0x0); // D3
mmio_write_32(0x030010D4, 0x0); // D2
mmio_write_32(0x030010D8, 0x0); // D1
mmio_write_32(0x030010DC, 0x0); // D0
mmio_write_32(0x030010E0, 0x0); // CMD
mmio_write_32(0x030010E4, 0x0); // CLK

如果想要使用UART3的功能,则需要写入寄存器来设置引脚的PINMUX:

在Linux用户空间可以使用devmem工具来写入寄存器

shell:

devmem 0x030010D0 32 0x5 # GPIOP 18 UART3 CTS
devmem 0x030010D4 32 0x5 # GPIOP 19 UART3 TX
devmem 0x030010D8 32 0x5 # GPIOP 20 UART3 RX
devmem 0x030010DC 32 0x5 # GPIOP 21 UART3 RTS

Linux系统中的串口使用:

C:

/* TODO */

shell:

stty -F /dev/ttyS1 115200 # 设置UART1波特率为115200
stty -F /dev/ttyS1 raw    # 设置tty为RAW模式
echo -n UUU > /dev/ttyS1 # 发送 UUU(0x55 0x55 0x55)
hexdump -C /dev/ttyS1     # 以HEX格式显示收到的数据

八、I2C

插针上引出了 I2C1 和 I2C3,将设备连接到其上即可。

使用前需要先正确设置 PINMUX:

# I2C1
devmem 0x030010D0 32 0x2 # GPIOP 18 I2C1 SCL
devmem 0x030010DC 32 0x2 # GPIOP 21 I2C1 SDA
# I2C3
devmem 0x030010E0 32 0x2 # GPIOP 22 I2C3 SCL
devmem 0x030010E4 32 0x2 # GPIOP 23 I2C3 SDA

然后可以使用 i2c-tools 进行 i2c 外设的操作,镜像中已经预装。

带WiFi模块的板卡(W、WE版)I2C1和I2C3硬件上连接到WiFi模块的SDIO,存在I2C无法读写的可能,PINMUX到I2C时WiFi模块不可用,可使用以下命令恢复WiFi连接:

# PINMUX到SDIO
devmem 0x030010D0 32 0x0
devmem 0x030010DC 32 0x0
devmem 0x030010E0 32 0x0
devmem 0x030010E4 32 0x0
# 重启WiFi服务
/etc/init.d/S30wifi stop
/etc/init.d/S30wifi start

摄像头和触摸屏接口共用I2C4,可使用 'i2cdetect -ry 4' 扫描设备。需注意I2C4处于1.8V电源域,连接其他设备时请注意电平匹配。

九、SPI

SPI2默认被复用作SDIO:

mmio_write_32(0x030010D0, 0x0); // D3
mmio_write_32(0x030010D4, 0x0); // D2
mmio_write_32(0x030010D8, 0x0); // D1
mmio_write_32(0x030010DC, 0x0); // D0
mmio_write_32(0x030010E0, 0x0); // CMD
mmio_write_32(0x030010E4, 0x0); // CLK

如果想要使用SPI2,则需要更改PINMUX:

devmem 0x030010D0 32 0x1 # GPIOP 18 SPI2 CS
devmem 0x030010DC 32 0x1 # GPIOP 21 SPI2 MISO
devmem 0x030010E0 32 0x1 # GPIOP 22 SPI2 MOSI
devmem 0x030010E4 32 0x1 # GPIOP 22 SPI2 SCK

简单测试SPI:

将SPI的MISO和MOSI连起来,然后执行:

spidev_test -D /dev/spidevN.N -p 1234 -v
# 将N.N换成对应的BUS

如果TX和RX的数据一样,则引脚复用没有问题

十、ADC

LicheeRV Nano插针上引出了一路12位ADC,在板内已做分压处理,如图:


经测试,ADC输入电压在0-4.6V时,对应ADC值为0000-4095

首先选择 ADC channel,这里以 ADC1 为例:

echo 1 > /sys/class/cvi-saradc/cvi-saradc0/device/cv_saradc

读取 ADC1 的值:

cat /sys/class/cvi-saradc/cvi-saradc0/device/cv_saradc

十一、LCD

将屏幕的排线接到板子的MIPI接口,注意线序

创建或编辑sd卡第一个分区中的uEnv.txt文件,添加或修改panel字段:

注:镜像将第一个分区已经挂载到/boot目录下,可在终端中直接操作:

cd /boot
touch uEnv.txt
vi uEnv.txt
# 使用 'i' 进入编辑
# 使用 'Esc',':wq'保存并退出

7寸屏(型号以屏幕丝印为准):

panel=zct2133v1

# 新屏
panel=mtd700920b

5寸屏(型号以屏幕丝印为准):

panel=st7701_dxq5d0019_V0

# 早期测试5寸屏使用:
# panel=st7701_dxq5d0019b480854

3寸屏:

panel=st7701_d300fpc9307a

2.3寸屏:

panel=st7701_hd228001c31

如果想用framebuffer功能,则在sd卡第一个分区创建一个文件名为fb的文件:

touch /boot/fb

然后加载驱动:

/etc/init.d/S04fb start

调整屏幕背光亮度:

echo 0 > /sys/class/pwm/pwmchip8/pwm2/enable
echo 5000 > /sys/class/pwm/pwmchip8/pwm2/duty_cycle # 50%
echo 1 > /sys/class/pwm/pwmchip8/pwm2/enable

# some example:
#echo 2000 > /sys/class/pwm/pwmchip8/pwm2/duty_cycle # 20%
#echo 4000 > /sys/class/pwm/pwmchip8/pwm2/duty_cycle # 40%
#echo 7000 > /sys/class/pwm/pwmchip8/pwm2/duty_cycle # 70%
#echo 9000 > /sys/class/pwm/pwmchip8/pwm2/duty_cycle # 90%

测试屏幕显示:

首先按照上面的方法打开fb,然后执行:

fbpattern # 显示SIPEED LOGO和测试用的图案

十二、触摸屏

将触摸屏排线接到板子的触摸屏接口,注意线序

如果是gt911芯片,则需要在第一个分区创建一个gt9xx文件:

touch /boot/gt9xx

然后加载驱动

/etc/init.d/S05tp start

然后执行:

echo 1 | evtest

点击触摸屏会在终端看到具体坐标

十三、WIFI

将天线安装到WIFI模块的天线座子上

13.1. STA

在sd卡第一个分区创建wifi.sta文件启用sta模式:

touch /boot/wifi.sta
rm /boot/wifi.ap /boot/wifi.mon

然后将AP的SSID和密码写入文件:

echo ssid > /boot/wifi.ssid
echo pass > /boot/wifi.pass

重启Wifi服务

/etc/init.d/S30wifi stop
/etc/init.d/S30wifi start

13.2. AP

在sd卡第一个分区创建wifi.ap文件启用ap模式:

touch /boot/wifi.ap
rm /boot/wifi.mon /boot/wifi.sta

然后将要创建AP的SSID和密码写入文件:

echo ssid > /boot/wifi.ssid
echo pass > /boot/wifi.pass

重启Wifi服务

/etc/init.d/S30wifi stop
/etc/init.d/S30wifi start

13.3. MON

在sd卡第一个分区创建wifi.mon文件启用监听模式:

touch /boot/wifi.mon
rm /boot/wifi.ap /boot/wifi.sta

重启Wifi服务

/etc/init.d/S30wifi stop
/etc/init.d/S30wifi start

使用tcpdump或airodump-ng来捕获报文

十四、摄像头

将摄像头安装到摄像头座子,注意线序

然后执行:

/mnt/system/usr/bin/sample_vio 6 # 将摄像头画面实时显示到屏幕
# 输入255回车,退出程序
/mnt/system/usr/bin/sensor_test # 摄像头测试程序,可以用来dump单张yuv图像

如果使用70405(内测版)的板子:

touch /boot/alpha # 内测版
# rm /boot/alpha  # 正式版
cd /mnt/data
cp sensor_cfg.ini.alpha sensor_cfg.ini   # 内测版
# cp sensor_cfg.ini.beta sensor_cfg.ini  # 正式版

十五、按键

使用命令查看按键事件:

echo 0 | evtest

然后按下USER按键,可以在终端看到对应的事件报告

十六、JTAG

需要下载平头哥的调试服务器:

https://xuantie.t-head.cn/community/download?id=4209675990638596096

】如何安装

https://occ-oss-prod.oss-cn-hangzhou.aliyuncs.com/resource//1682234034575/T-Head+Debugger+Server+User+Guide+%28ZH-CN%29.pdf

准备一个Slogic Combo 8,切换到CKLINK模式,并连接到JTAG引脚


】如何连接

[] 开启CKLink功能

按下切换按键,将指示灯切换为黄色


验证CKLink功能是否开启的方法:
Windows环境打开设备管理器,Linux环境使用lsusb命令,可以找到"CKLink HS"设备


[] 开始使用

引脚连接

CKLink和DAPLink线序相似,所以放到了一张图里,请忽略掉“DAP”


CKLink模式下可以同时支持一路CKLink和一路UART

  • 上图左侧的引脚(TXD、RXD、DTR、RTS)可以作为串口使用
  • 上图右侧的引脚(TCK、TDI、TDO、TMS)作为CKLink调试使用


使用方法

在Windows、Linux系统可以直接参考使用 CDK + Sipeed RV-Debugger Plus 编译调试T-HEAD Debug Server 用户手册,用法完全一样


使用CDK进行调试

  • 点击工具栏上方的Start/Stop Debugger按钮,进入debug界面,如下图所示


Debug HellowWorld!

  •     debug界面下,你可以在左侧的Register窗口中查看CPU的内部寄存器数据。同时,在右侧的Peripherals外设面板中,你可以浏览相应外设寄存器数据。你可以通过顶部菜单栏的Peripherals->System Viewer来选择所需的外设。此外,在界面上方的工具栏中,你会找到相关的调试按钮,它们可以用于设置断点、单步调试、逐条指令执行以及全速运行等操作。当然,所有这些操作都有相应的快捷键和快速设置方式。如需详细信息,请参考CDK帮助文档,这里就不再详细展开介绍。


  •     点击单步运行按钮,运行代码,即可看到指示光标移动到下一句代码,同时可以看到串口面板中显示输出的 Hello World!


RV Nano的JTAG引脚:

PA19 JTAG_TMS
PA18 JTAG_TCK
PA29 JTAG_TDO
PA28 JTAG_TDI

然后将调试器连接到电脑,切换到CKLINK模式,给板子上电,按住RESET按钮,然后松开的时候启动DebugServer


】系统开发

一、芯片手册

datasheet: https://github.com/sophgo/sophgo-doc/releases

二、芯片启动流程

bootrom(bl1) 判断sd卡第一个FAT分区内是否拥有 fip.bin,如果有,则执行2,如果没有,则进入usb烧录模式(提供一个ACM串口从机设备),bl1会初始化uart0,波特率128000

】加载fip.bin(bl2)里面的代码到0x0C000000(TPU SRAM),跳转到bl2,初始化clock,DRAM,执行3

】加载opensbi到DRAM,执行,然后加载uboot到DRAM

】uboot加载第一个分区内的boot.sd文件到DRAM,如果文件没有问题

】跳转到boot.sd内提供的代码(通常是Linux内核)一个简单的裸机HelloWorld demo,用于演示:

】最小化可以启动的fip.bin(bl2):

】启动C906小核

】一些外设的裸机驱动(TODO)

】启动8051(TODO)

https://github.com/0x754C/sg200x-bare

三、cvi_mmf_sdk

基于算能官方SDK修改,如果要使用mmf框架,则必须使用这个SDK

源码:

https://github.com/sipeed/LicheeRV-Nano-Build

构建环境搭建可以参考repo内的github cicd文件:

https://github.com/sipeed/LicheeRV-Nano-Build/blob/main/.github/workflows/licheervnano-host-linux-amd64.yml

文档:

四、主线buildroot

TODO

基于主线buildroot,提供更干净的构建环境

五、openwrt

TODO

基于主线openwrt,面向将板子当作便携无线AP的用户。

六、alpine linux

TODO

基于主线alpine linux,面向在板子上跑distro的用户。

七、引脚复用

这些寄存器的描述可以在芯片手册中找到

提供两种方法修改引脚复用

  1. 进入系统后读写/dev/mem修改pinumux:
devmem REG_ADDDRESS 32 VALUE
  1. 在uboot里面修改pinmux:

例如,wifi的pinmux:

https://github.com/sipeed/LicheeRV-Nano-Build/blob/926bbe94f4f00059ce0ff3857cc72a708aa85122/build/boards/cv181x/cv1812cp_licheerv_nano_sd/u-boot/cvi_board_init.c#L52

八、初始化MIPI TX

算能SDK提供两种方式:

  1. 在middleware中的用户空间demo中添加屏幕初始化序列.

  2. 在uboot中添加屏幕的初始化序列.(目前使用这种方式)

九、初始化MIPI RX

算能SDK的MIPI RX目前只能在用户空间初始化,需要修改middleware中的代码


】MMF开发指南

一、简述

本文用来介绍使用算能SDK开发MMF的方法,为想要上手开发MMF却无从下手的开发者提供一个开发思路。
MMF全称是多媒体软件架构(Multimedia Framework),这个架构将视频输入输出、音频输入输出、图像信号处理、硬件编解码等功能提供了统一格式的API,用户可以通过调用封装好的API来快速实现多媒体相关的功能。

二、搭建MMF的开发环境

请参考LicheeRV Nano->系统开发->cvi_mmf_sdk中介绍的方法来搭建MMF的开发环境

或者参考下面的指令

# 下载依赖
sudo apt install pkg-config build-essential ninja-build automake autoconf libtool wget curl git gcc libssl-dev bc slib squashfs-tools android-sdk-libsparse-utils android-sdk-ext4-utils jq cmake python3-distutils tclsh scons parallel ssh-client tree python3-dev python3-pip device-tree-compiler libssl-dev ssh cpio squashfs-tools fakeroot libncurses5 flex bison

# 下载sdk和工具链
git clone https://github.com/sipeed/LicheeRV-Nano-Build.git
wget https://sophon-file.sophon.cn/sophon-prod-s3/drive/23/03/07/16/host-tools.tar.gz
tar xvf host-tools.tar.gz

# 用build_middleware命令编译所有示例
cd LicheeRV-Nano-Build
ln -s ../host-tools ./
source build/cvisetup.sh
defconfig sg2002_licheervnano_sd
build_middleware

上述指令介绍了如何安装MMF相关的编译环境,以及如何编译SDK提供的MMF示例。

  • 注意:你可能在编译sample_cvg时会失败,如果不需要使用这个示例,则删掉LicheeRV-Nano-Build/middleware/v2/sample/cvg文件夹后再重试。如果你需要这个demo,则使用build_all编译后再尝试,build_all需要编译整个sdk,因此编译时间较长

三、开发资料

请参考LicheeRV Nano->板卡介绍中来找到大部分资料

对于MMF应用可以着重看下面的资料

四、通过网络连接开发板

通过网络连接开发板的目的是为了让我们编译的固件可以被上传到板子中。

请参考LicheeRV Nano->外设使用中的方法来获取开发板的IP地址,三种方法任意实现其中一种即可:网线连接WIFI连接USB RNDIS连接

五、编译和运行一个示例

MMF内部封装了直接操作硬件的方法,因此稍有疏忽就有导致系统崩溃的可能,开发MMF一定要注意保持耐心和注重细节。建议是通过示例来修改出自己的程序。

以sample_vio为例

# 确保已经搭建好了MMF的基本编译环境,并且已经使用build_middleware编译过一次
# 编译sample_vio
cd middleware/v2/sample/vio
make

# 上传到开发板(账户root,密码cvitek)
scp sample_vio root@xxx.xxx.xxx.xxx:/root	# xxx.xxx.xxx.xxx是板子的IP地址

# 登入开发板
ssh root@xxx.xxx.xxx.xxx

# 如果需要使用显示屏,则需要运行fb_load.sh以确保加载了驱动(只需要执行一次)
# 新版镜像不用执行这个,已经内置到uboot
/opt/fb_load.sh

# 运行示例
cd ~
./sample_vio

上述指令介绍了如何编译某一个MMF示例,以及上传示例到开发板和运行这个示例。开发者可以根据自己的应用来修改示例,最后开发出自己想要实现的功能。

六、出现无法解决的问题怎么办

  1. 请保持耐心、并仔细的参阅开发资料,尝试找到是否存在遗漏的地方。比如输入参数是否正确、资源是否真正的释放等。
  2. maixhub或github上发布你的问题。请整理好你想要实现的功能、遇到的问题、尝试过的解决方案以及复现方法,顺便一提,很多时候在整理思路的过程中就能找到解决的方法了。


】售后

周一-周五(9:30-6:30)周六(9:30-5:30)

手机:13434470212

邮箱:services04@spotpear.cn

QQ:202004841




[教程导航]