92 KiB
百问网 AvaotaF1 核心板
百问网的 AvaotaF1 V821 开发套件 采用 Pico 尺寸设计,紧凑且功能强大,支持标准 2.54 排针接口,方便与面包板连接,进行 DIY 实验。其超薄双面设计令其尺寸仅与 1 元硬币相当,集成了 V821 所有核心功能,极大地提升了开发灵活性与可扩展性。
这款开发套件具备多种强大特性:
- 板载 MIPI CSI 摄像头接口,支持高清图像采集。
- MIC 拾音功能,便于音频采集。
- SPI NOR FLASH(32MB),提供充足的存储空间。
- WiFi 陶瓷天线,支持无线连接,拓展网络功能。
- TF 卡卡座,方便数据存储和扩展。
- 烧录按键,简化固件烧录操作。
- 丰富的 GPIO 资源,可灵活配置和控制外部硬件设备。
- 硬件没有使用PMC功能
该开发套件支持最新的 Tina Linux 5.0 系统,可直接在 V821 AvaotaF1 上进行开发。除此之外,还支持多种配件:
- MIPI 摄像头 GC2083,提供高质量图像采集。
- SPI 屏幕:包括 3.5 寸 320x480 分辨率显示屏和 1.54 寸 240x240 分辨率显示屏,适应多样的显示需求。
AvaotaF1 V821 开发套件集成了丰富的功能,操作简便且便于拓展,是进行嵌入式开发与实验的理想选择。
核心板参数
| 项目 | 参数 |
|---|---|
| 主控 | 全志V821L2-WXX |
| PMU | 集成电源芯片EA3036 |
| DDR | Internal 64MB DDR2 |
| Memory | Nor Flash 32MB(PY25Q256) |
| 无线网络 | SIP 2.4GHz WIFI |
| 摄像头 | 单目 1920x1080@30fps |
| 屏幕 | 3.5寸(320*480)SPI 屏 |
| 麦克风 | 模拟麦克风*1 |
| 按键 | FEL烧录 |
| 灯 | LED * 1 |
| Debug | 支持uart串口调试,支持ADB USB调试 |
| USB | Type-C USB * 1, 同时支持供电和数据传输以及串口输出 |
| GPIO | 引出双盘排针30Pin 支持多达28个GPIO信号 |
| 板身尺寸 | 长35mm*宽22mm |
| 板层 | 6层板 |
核心板接口功能示意
核心板接口功能
| Signal Name | Description | Type |
|---|---|---|
| FEL | Boot Process Select Jump to the Try Media Boot process when FEL is high level, or else enter into the mandatory upgrade process. | I |
| Clock Fanout | ||
| CLK-FANOUT0 | Internal Clock Fanout Optional Frequency: 32 kHz, 12 MHz, 16 MHz, 24 MHz, 25 MHz, 27 MHz | O |
| RF | ||
| FEM-CTRL0 | Front End Module Control, TX-EN | I/O |
| FEM-CTRL1 | Front End Module Control, RX-EN | I/O |
| SD Card/SDIO/eMMC | ||
| SDC1-CMD | SDIO Command Output/Response Input | I/O, OD |
| SDC1-CLK | SDIO Clock Output | O |
| SDC1-D0 | SDIO Data Input/ Output 0 | I/O |
| SDC1-D1 | SDIO Data Input/ Output 1 | I/O |
| SDC1-D2 | SDIO Data Input/ Output 2 | I/O |
| SDC1-D3 | SDIO Data Input/ Output 3 | I/O |
| I2S/PCM | ||
| I2S0-MCLK | I2S0 Master Clock | O |
| I2S0-LRCK | I2S0/PCM0 Sample Rate Clock/Sync | I/O |
| I2S0-BCLK | I2S0/PCM0 Bit Rate Clock | I/O |
| I2S0-DIN0 | I2S0/PCM0 Serial Data Input 0 | I |
| I2S0-DIN1 | I2S0/PCM0 Serial Data Input 1 | I |
| I2S0-DIN2 | I2S0/PCM0 Serial Data Input 2 | I |
| I2S0-DIN3 | I2S0/PCM0 Serial Data Input 3 | I |
| I2S0-DOUT0 | I2S0/PCM0 Serial Data Output 0 | O |
| I2S0-DOUT1 | I2S0/PCM0 Serial Data Output 1 | O |
| I2S0-DOUT2 | I2S0/PCM0 Serial Data Output 2 | O |
| I2S0-DOUT3 | I2S0/PCM0 Serial Data Output 3 | O |
| GPADC | ||
| GPADC0-0 | General Purpose ADC0 Input 0 | AI |
| GPADC0-2 | General Purpose ADC0 Input 2 | AI |
| GPADC0-3 | General Purpose ADC0 Input 3 | AI |
| MIPI CSI | ||
| CSI-SM-HS | CSI Horizontal SYNC | O |
| CSI-SM-VS | CSI Vertical SYNC/Frame SYNC | O |
| Parallel CSI | ||
| NCSI-PCLK | Parallel CSI Pixel Clock Input | I |
| NCSI-MCLK | Parallel CSI Master Clock Output | O |
| NCSI-HSYNC | Parallel CSI Horizontal Synchronous Input | I |
| NCSI-VSYNC | Parallel CSI Vertical Synchronous Input | I |
| NCSI-D0 | Parallel CSI Pixel Data 0 | I |
| NCSI-D1 | Parallel CSI Pixel Data 1 | I |
| NCSI-D2 | Parallel CSI Pixel Data 2 | I |
| NCSI-D3 | Parallel CSI Pixel Data 3 | I |
| NCSI-D4 | Parallel CSI Pixel Data 4 | I |
| NCSI-D5 | Parallel CSI Pixel Data 5 | I |
| NCSI-D6 | Parallel CSI Pixel Data 6 | I |
| NCSI-D7 | Parallel CSI Pixel Data 7 | I |
| NCSI-D8 | Parallel CSI Pixel Data 8 | I |
| NCSI-D9 | Parallel CSI Pixel Data 9 | I |
| NCSI-D10 | Parallel CSI Pixel Data 10 | I |
| NCSI-D11 | Parallel CSI Pixel Data 11 | I |
| LCD | ||
| LCD-CLK | LCD Clock | O |
| LCD-VSYNC | LCD Vertical Synchronization | O |
| LCD-HSYNC | LCD Horizontal Synchronization | O |
| LCD-DE | LCD Data Enable | O |
| TCON-FSYNC | Frame Synchronization Signal for TCON and Sensor | O |
| TCON-TRIG | Screen Trigger Signal | I |
| LCD-D3 | LCD Data Input/Output 3 | I/O |
| LCD-D4 | LCD Data Input/Output 4 | I/O |
| LCD-D5 | LCD Data Input/Output 5 | I/O |
| LCD-D6 | LCD Data Input/Output 6 | I/O |
| LCD-D7 | LCD Data Input/Output 7 | I/O |
| LCD-D10 | LCD Data Input/Output 10 | I/O |
| LCD-D11 | LCD Data Input/Output 11 | I/O |
| LCD-D12 | LCD Data Input/Output 12 | I/O |
| Ethernet MAC | ||
| RMII-TXCK | RMII Transmit Clock | I |
| RMII-RXER | RMII Receive Error | I |
| RMII-CRS-DV | RMII Carrier Sense Receive Data Valid | I |
| RMII-TXEN | RMII Transmit Enable | O |
| RMII-EPHY-25M | EMAC PHY 25 MHz Clock Output | O |
| RMII-MDC | RMII Management Data Clock | O |
| RMII-MDIO | RMII Management Data Input/ Output | I/O |
| RMII-RXD0 | RMII Receive Data 0 | I |
| RMII-RXD1 | RMII Receive Data 1 | I |
| RMII-TXD0 | RMII Transmit Data 0 | O |
| RMII-TXD1 | RMII Transmit Data 1 | O |
| SPI&SPI DBI | ||
| SPI1-CS0 | SPI1 Chip Select 0 (Active Low) | I/O |
| SPI1-CS1 | SPI1 Chip Select 1 (Active Low) | I/O |
| SPI1-CLK | SPI1 Clock | I/O |
| SPI1-MOSI | SPI1 Master Data Out, Slave Data In | I/O |
| SPI1-MISO | SPI1 Master Data In, Slave Data Out | I/O |
| SPI1-WP | SPI1 Write Protection (Active Low)/ Serial Data Input and Output for Quad Input or Quad Output | I/O |
| SPI1-HOLD | SPI1 Hold Signal/ Serial Data Input and Output for Quad Input or Quad Output | I/O |
| SPI2-CS0 | SPI2 Chip Select 0 (Active Low) | I/O |
| SPI2-CLK | SPI2 Clock | I/O |
| SPI2-MOSI | SPI2 Master Data Out, Slave Data In | I/O |
| SPI2-MISO | SPI2 Master Data In, Slave Data Out | I/O |
| SPI2-WP | SPI2 Write Protection (Active Low)/ Serial Data Input and Output for Quad Input or Quad Output | I/O |
| SPI2-HOLD | SPI2 Hold Signal/ Serial Data Input and Output for Quad Input or Quad Output | I/O |
| DBI-CSX | Chip Select Signal (Active Low) | I/O |
| DBI-SCLK | Serial Clock Signal | I/O |
| DBI-SDO | Data Output Signal | I/O |
| DBI-SDI | Data Input Signal The data is sampled on the rising edge and the falling edge. | I/O |
| DBI-TE | Tearing Effect Input It is used to capture the external TE signal edge. The rising and falling edge is configurable. | I/O |
| DBI-DCX | DCX pin is the select output signal of data and command. DCX = 0: register command; DCX = 1: data or parameter. | I/O |
| DBI-WRX | When DBI operates in dual data lane format, the RGB666 format 2 can use WRX to transfer data | I/O |
| UART | ||
| UART0-RX | UART0 Data Receiver | I |
| UART0-TX | UART0 Data Transmitter | O |
| UART1-CTS | UART1 Clear to Send | I |
| UART1-RTS | UART1 Request to Send | O |
| UART1-RX | UART1 Data Receiver | I |
| UART1-TX | UART1 Data Transmitter | O |
| UART2-CTS | UART2 Clear to Send | I |
| UART2-RTS | UART2 Request to Send | O |
| UART2-RX | UART2 Data Receiver | I |
| UART2-TX | UART2 Data Transmitter | O |
| UART3-RX | UART3 Data Receiver | I |
| UART3-TX | UART3 Data Transmitter | O |
| PWM | ||
| PWM0-0 | PWM0 Wave Output /Capture Wave Input 0 | I/O |
| PWM0-1 | PWM0 Wave Output /Capture Wave Input 1 | I/O |
| PWM0-2 | PWM0 Wave Output /Capture Wave Input 2 | I/O |
| PWM0-3 | PWM0 Wave Output /Capture Wave Input 3 | I/O |
| PWM0-4 | PWM0 Wave Output /Capture Wave Input 4 | I/O |
| PWM0-5 | PWM0 Wave Output /Capture Wave Input 5 | I/O |
| PWM0-6 | PWM0 Wave Output /Capture Wave Input 6 | I/O |
| PWM0-7 | PWM0 Wave Output /Capture Wave Input 7 | I/O |
| PWM0-8 | PWM0 Wave Output /Capture Wave Input 8 | I/O |
| PWM0-9 | PWM0 Wave Output /Capture Wave Input 9 | I/O |
| PWM0-10 | PWM0 Wave Output /Capture Wave Input 10 | I/O |
| PWM0-11 | PWM0 Wave Output /Capture Wave Input 11 | I/O |
| TWI | ||
| TWI0-SCK | TWI0 Serial Clock Signal | I/O |
| TWI0-SDA | TWI0 Serial Data Signal | I/O |
| TWI1-SCK | TWI1 Serial Clock Signal | I/O |
| TWI1-SDA | TWI1 Serial Data Signal | I/O |
| TWI2-SCK | TWI2 Serial Clock Signal | I/O |
| TWI2-SDA | TWI2 Serial Data Signal | I/O |
| JTAG | ||
| R-JTAG0-TMS | CPU0 JTAG Mode Select | I/O |
| R-JTAG0-TCK | CPU0 JTAG Clock Signal | I |
| R-JTAG1-TMS | CPU1 JTAG Mode Select | I/O |
| R-JTAG1-TCK | CPU1 JTAG Clock Signal | I |
| Interrupt | ||
| PD-EINT1 | Port D Interrupt | I |
| PD-EINT2 | Port D Interrupt | I |
| PD-EINT3 | Port D Interrupt | I |
| PD-EINT4 | Port D Interrupt | I |
| PD-EINT5 | Port D Interrupt | I |
| PD-EINT6 | Port D Interrupt | I |
| PD-EINT7 | Port D Interrupt | I |
| PD-EINT8 | Port D Interrupt | I |
| PD-EINT9 | Port D Interrupt | I |
| PD-EINT10 | Port D Interrupt | I |
| PD-EINT11 | Port D Interrupt | I |
| PD-EINT12 | Port D Interrupt | I |
| PD-EINT13 | Port D Interrupt | I |
| PD-EINT14 | Port D Interrupt | I |
| PD-EINT15 | Port D Interrupt | I |
| PD-EINT16 | Port D Interrupt | I |
| PD-EINT17 | Port D Interrupt | I |
| PD-EINT18 | Port D Interrupt | I |
| PD-EINT19 | Port D Interrupt | I |
| PD-EINT22 | Port D Interrupt | I |
| PD-EINT23 | Port D Interrupt | I |
| PL-EINT2 | Port L Interrupt | I |
| PL-EINT3 | Port L Interrupt | I |
| PL-EINT4 | Port L Interrupt | I |
| PL-EINT5 | Port L Interrupt | I |
| PL-EINT6 | Port L Interrupt | I |
| PL-EINT7 | Port L Interrupt | I |
核心板使用入门
串口调试
核心板支持接出两路调试串口,分别为 RISC-V CPU Linux 核心串口 UART0,RISC-V MCU RTOS 核心串口 UART3,波特率均为 115200
危险
SDK 1.2 默认波特率修改为 1500000,请使用波特率 1500000
提示
SDK 1.3 支持切换波特率,在 lunch 的时候可以选择 115200 或者 1500000
核心板调试串口有两种接入方式:
- 使用 USB 拆分器接入串口:仅接出常用的 CPU 核心串口 UART0
- 使用 GPIO 接入串口:支持接出 CPU 核心串口 UART0 和 MCU 核心串口 UART3
使用 USB 拆分器接入串口
核心板设计之时复用了 TypeC 中的 SBU 信号线用于传输串口信号,这个串口是 UART0,与 PL4,PL5 并联。接入方法如下:
使用 GPIO 接入串口
核心板串口位于 PL 口,如下图所示,需要焊接或者排针接出。其中绿色的是 RISC-V MCU 核心串口,蓝色的是 RISC-V CPU 串口。
串口线打开电脑的设备管理器,确认串口号,例如这里是 COM5
硬件连接完成后,使用串口终端访问,波特率 115200 。例如这里使用的 PuTTY
危险
SDK 1.2 默认波特率修改为 1500000,请使用波特率 1500000
提示
SDK 1.3 支持切换波特率,在 lunch 的时候可以选择 115200 或者 1500000
如果是刷入固件的核心板,上电后即可看到启动日志与控制台
ADB 调试
备注
如果烧录的是 UVC 固件,UVC 会自动切换 USB 枚举为 UVC 设备,此时无法使用 ADB 调试。
在电脑上安装 ADB,打开 CMD 使用 adb shell 进入终端。
(1) 在 全志开发者社区-资料下载 专区 下载 ADB 工具 ADB(tab自动补全版) (2)下载后解压放到本地磁盘下(例如D盘的adb文件夹里)
(3) 右键 ”此电脑“,属性,找到高级系统设置,点击环境变量,xxx用户的环境变量,Path,新增一个环境变量。
(4) 打开命令提示符,输入 adb shell
ADB 也可以作为文件传输使用,例如:
- 将 sample.mp4 上传到核心板 /mnt/UDISK 目录内
C:\System> adb push sample.mp4 /mnt/UDISK
- 将 /mnt/UDISK/sample.mp4 下拉到当前目录内
C:\System> adb pull /mnt/UDISK/sample.mp4
重启
在核心板终端 Linux 命令行中输入 reboot 即可重启
在核心板终端 U-Boot 命令行中输入 reset 即可重启
进入烧录模式
有多种方式可以让核心板进入烧录模式。
按键进入烧录模式
在核心板找到按键 FEL,断开USB,电源,
(1)按住 FEL 按键
(2)插入 USB 线
(3)等待电脑连接成功,松开 FEL 按键即可进入烧录模式
命令行进入烧录模式
在 Linux 命令行中输入 reboot efex 即可重启进入烧录模式
reboot efex
在 U-Boot 命令行中输入 efex 即可重启进入烧录模式
=> efex
破坏启动介质进入烧录模式(SPI NOR)
在 Linux 命令行中输入 echo 000000 > /dev/mtd0,破坏启动引导介质,重启后即可进入烧录模式
WI-FI
Wi-Fi 连接网络
这里首先介绍如何使用 wifi 扫描网络:
(1)设置 Wi-Fi 为 STATION 模式
wifi -o sta
(2)扫描当前网络环境的 Wi-Fi 站点
wifi -s
(3)连接Wi-Fi(SSID:awol,密码 1234567890)
wifi -c awol 1234567890
(4)连接网络后输入 ifconfig 即可查看当前 ip 地址
可以使用 ping 命令测试 网络连接
ping www.baidu.com
它会输出以下内容
PING 202.108.22.5 (202.108.22.5): 56 data bytes
64 bytes from 202.108.22.5: seq=0 ttl=49 time=48.734 ms
64 bytes from 202.108.22.5: seq=1 ttl=49 time=48.624 ms
64 bytes from 202.108.22.5: seq=2 ttl=49 time=58.370 ms
64 bytes from 202.108.22.5: seq=3 ttl=49 time=69.119 ms
64 bytes from 202.108.22.5: seq=4 ttl=49 time=49.635 ms
(5)断开Wi-Fi
wifi -d
Wi-Fi 建立 AP
(1)创建热点 (SSID:v821,密码 12345678)
wifi -o ap v821 12345678
(2)然后就可以扫描到 Wi-Fi 了,输入密码 12345678 进行连接
音频 MIC
查看音频设备
使用命令 amixer 可以列出全部音频设备
amixer
Simple mixer control 'ADC',0
Capabilities: volume volume-joined
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 255
Mono: 160 [63%] [0.75dB]
Simple mixer control 'ADC DRC0 Mode',0
Capabilities: enum
Items: 'Off' 'On'
Item0: 'Off'
Simple mixer control 'ADC DRC1 Mode',0
Capabilities: enum
Items: 'Off' 'On'
Item0: 'Off'
Simple mixer control 'ADC HPF0 Mode',0
Capabilities: enum
Items: 'Off' 'On'
Item0: 'Off'
Simple mixer control 'ADC HPF1 Mode',0
Capabilities: enum
Items: 'Off' 'On'
Item0: 'Off'
Simple mixer control 'ADDA Loop Mode',0
Capabilities: enum
Items: 'Off' 'DAC-to-ADC'
Item0: 'Off'
Simple mixer control 'DAC',0
Capabilities: volume volume-joined
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 63
Mono: 63 [100%] [-1.16dB]
Simple mixer control 'DAC DRC Mode',0
Capabilities: enum
Items: 'Off' 'On'
Item0: 'Off'
Simple mixer control 'DAC HPF Mode',0
Capabilities: enum
Items: 'Off' 'On'
Item0: 'Off'
Simple mixer control 'DACL',0
Capabilities: volume volume-joined
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 255
Mono: 160 [63%] [0.75dB]
Simple mixer control 'LINEOUT',0
Capabilities: pswitch pswitch-joined
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'LINEOUT Gain',0
Capabilities: volume volume-joined
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 31
Mono: 31 [100%]
Simple mixer control 'LINEOUT Output Select',0
Capabilities: enum
Items: 'DIFFER' 'SINGLE'
Item0: 'SINGLE'
Simple mixer control 'MIC',0
Capabilities: pswitch pswitch-joined
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'MIC Gain',0
Capabilities: volume volume-joined
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 31
Mono: 31 [100%]
Simple mixer control 'SPK',0
Capabilities: pswitch pswitch-joined
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'rx sync mode',0
Capabilities: enum
Items: 'Off' 'On'
Item0: 'Off'
Simple mixer control 'tx hub mode',0
Capabilities: enum
Items: 'Off' 'On'
Item0: 'Off'
查看录音设备
可以使用 arecord -l 命令查看核心板提供的录音设备。
arecord -l
麦克风录音
V821 核心板板载一个麦克风,在录音之前,首先需要打开音频通路,配置内部 MIC0录制音频(需要 SDK 配置 alsa-utils 软件包才能直线 amixer 等命令)。
提示
配置软件包方法:make menuconfig,勾选以下软件包
Allwinner --->
Audio --->
<*> AudioSystem.......................................... AudioSystem library
<*> aactd............................ Allwinner Audio Calibration Tool Daemon
-*- aactd-lib....................... Allwinner Audio Calibration Tool Library
<*> alsa-plugins-aw.............................. ALSA plugins from Allwinner
Sound --->
<*> alsa-utils............ ALSA (Advanced Linux Sound Architecture) utilities
(1)打开 MIC 通路
amixer -Dhw:audiocodec cset name="MIC Switch" 1
输出如下,表示音频通路已开启
numid=16,iface=MIXER,name='MIC Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
(2)设置 MIC 音量
amixer -Dhw:audiocodec cset name="MIC Gain" 10
输出如下,表示设置成功
numid=15,iface=MIXER,name='MIC Gain'
; type=INTEGER,access=rw---R--,values=1,min=0,max=31,step=0
: values=30
| dBscale-min=0.00dB,step=1.00dB,mute=0
使用 arecord -D hw:audiocodec -f S16_LE -t wav -r 16000 -d 3 t.wav 命令,使用板载的麦克风进行录音。
arecord -D hw:audiocodec -f S16_LE -t wav -r 16000 -d 3 t.wav
可以看到输出的 t.wav 文件
配套模块
摄像头模块
核心板套件配备了摄像头模块与配套的排线,请注意排线需要同向排线。
摄像头模组排线的 1 脚如图所示,蓝色塑料面朝上插入排线
核心板摄像头接口的 1 脚
在接入时请确保 1 脚与 1 脚对应,否则会出现摄像头烧毁的风险。
- 金属触点这一面面向 Avaota F1 文字
- 蓝色塑料这一面面向核心板内部
摄像头具体使用可以参考 【SDK 功能演示体验】,具体演示如何编译运行一个 RTSP 测试 DEMO
SDK 功能演示体验
本文将以 V821 PERF2 板为示例,演示搭建 Smart IPC 场景功能,包括:
- RTSP H264 1280*720@20fps 预览
- 1280*720@20fps H264 编码视频分段滚动录像
- 定时拍照
需要准备如下物品:
- V821 PERF2 开发板
- 单目GC1084模组
- 串口线(用于调试)
- USB线(用于下载烧录,传输文件)
- SD 卡(用于保存码流)
- WIFI天线(用于无线传输)
- 路由器(用于数据交换)
- 手机或笔记本电脑(用于播放码流)
硬件连接
准备好摄像头,排线,V821 PERF2 开发板,排线需要同向排线。
将排线的蓝面朝上,接入摄像头模块
排线另外一边,触点面朝向芯片,接入 PERF2 开发板
摄像头安装完成
安装天线,将天线接入天线插口
插入调试串口
准备固件
如果已有固件,可以跳过本章节,从烧录固件开始看
配置方案
首先输入以下命令,配置SDK开发环境
source build/envsetup.sh
然后输入 lunch 命令加载方案
lunch
这里选择 v821-perf2-tina 方案,输入 4,按回车
配置测试 Sample
输入以下命令,进入配置界面
make menuconfig
配置页面如下
下拉找到 Allwinner 按回车进入
在最下面找到 eyesee-mpp,按回车进入
找到 select mpp sample,按空格选中(先选择eyesee-mpp-middleware-demo config就出来select mpp sample)
找到 mpp sample smartIPC_demo,按空格选中
提示
如果找不到 mpp sample smartIPC_demo 选项,先去检查一下依赖软件包 rgb_ctrl 有没有打开,如果没有打开需要开一下
使用方向键选择 Save
选择 OK
选择 EXIT
使用方向键选择 Exit
继续退出
继续退出
编译 SDK
回到控制台,输入 mp -j4 以 4 线程并行方式编译
等待 SDK 编译完成,会在 out 目录下生成固件
将固件拷贝出来,准备烧录
烧写固件
打开 PhoenixSuit,选择一键刷机,点击浏览,打开刚才生成的固件
选择全盘擦除升级
按住 PERF2 开发板上的FEL按键,插入USB线
烧录工具出现提示,选择是
烧录中,请耐心等待
烧写结束,系统自动启动
配置 Sample
前往 platform/allwinner/eyesee-mpp/middleware/sun300iw1/sample/bin 找到刚才编译出来的Sample
编辑 sample_smartIPC_demo.conf 修改配置文件,需要修改的项目如下(可以在附录获取完整版配置文件):
stream_buf_size = -1 # 使用码流大小推流
main_rtsp_id = 0 # 启用 RTSP
main_src_frame_rate = 20 # 帧率设置 20 帧
main_encode_frame_rate = 20 # 配置编码器20帧
main_2nd_enable = 1 # 开启子码流
main_2nd_src_frame_rate = 20 # 子码流帧率20帧
main_2nd_encode_frame_rate = 20 # 子码流编码帧率20帧
main_2nd_take_picture = 1 # 子码流开启拍照功能
将SD卡格式化为 FAT32 格式
将上面编译出来的 sample 和 配置文件复制到 SD 卡里
测试运行 Sample
配置无线网络
使用命令扫描无线网络
wifi -s
使用命令连接无线网络,连接成功后使用 ifconfig 命令查看连接情况与 IP 地址
wifi -c <SSID> <密码>
ifconfig wlan0
挂载 SD 卡
插入 SD 卡后,可以在日志里看到新生成的卡设备
使用命令挂载 SD 卡
mount /dev/mmcblk0p1 /mnt/extsd
运行 Sample
前往SD卡的挂载目录,查看文件是否存在
cd /mnt/extsd
使用命令,运行 sample
./sample_smartIPC_demo -path sample_smartIPC_demo.conf &
在平板上打开 VLC 播放器。配置日志显示的地址
rtsp://192.168.51.101:8554/ch0
即可打开串流视频
SD 卡插上电脑也可以看到拍到的图片和码流
附录:Sample 配置
########### paramter (ref to tulip_cedarx.conf)############
[parameter]
rtsp_net_type = 3 #RTSP Network type, 0: "lo", 1: "eth0", 2: "br0", 3: "wlan0"
ve_rec_ref_buf_reduce_enable = 1 #0:disable buf reduce, 1:enable buf reduce
stream_buf_size = -1
product_mode = 0 #0:static ipc, 1:moving ipc, 2: doorbell, 3:cdr, 4:sdv, 5:projection, 6:UAV(Unmanned Aerial Vehicle)
vbr_opt_en = 1 #0: old vbr bitrate control, 1:new vbr bitrate control
vbr_opt_rc_priority = 0 #only for vbr opt, balance bitrate and quality, 0:quality priority, 1:bitrate priority, 2:avg bitrate first, 3:instantaneous bitrate first
rc_mode = 1 #for H264, 0:CBR 1:VBR 2:FIXQP(only for debug)
init_qp = 37
min_i_qp = 25
max_i_qp = 45
min_p_qp = 25
max_p_qp = 45
moving_th = 20
mb_qp_limit_en = 1
quality = 1
p_bits_coef = 10
i_bits_coef = 10
isp_ve_linkage_enable = 1
region_link_enable = 1
region_link_tex_detect_enable = 1
region_link_motion_detect_enable = 1
camera_adaptive_moving_and_static_enable = 1
ve_lens_moving_max_qp = 40
wb_yuv_enable = 0
wb_yuv_buf_num = 3
wb_yuv_scaler_ratio = 0 #0:no scaler, 1: 1/8, 2: 1/2, 3: 1/4
wb_yuv_start_index = 0
wb_yuv_total_cnt = 100
wb_yuv_stream_channel = 0 #venc channel id
wb_yuv_file_path = "/mnt/extsd/wb_yuv.yuv"
vi_timeout_reset_disable = 0 #0:enable(default), >0:disable vi timeout reset for debug.
test_trigger_vi_timeout = 0 #0:disable, >0:enable and means time interval, unit is ms.
encpp_sharp_debug_disable = 0
tdm_speed_down_enable = 0
ve_2dnr_disable = 0
ve_3dnr_disable = 0
test_duration = 0 #unit:s, 0:Infinite duration.
ir_cut_switch_test_enable = 0
ir_cut_switch_interval = 10 #unit:s
ir_cut_switch_isp = 0
ir_cut_switch_ir_bin_path = "/mnt/extsd/ir"
ir_cut_switch_rbg_bin_path = "/mnt/extsd/rgb"
audio_test_enable = 0
capture_en = 1
capture_sample_rate = 16000
capture_bit_witdh = 16
capture_channel_cnt = 1
capture_ans_en = 1
capture_agc_en = 1
capture_aec_en = 1
capture_save_file = "/mnt/extsd/capture_"
capture_save_file_max_cnt = 10
capture_save_file_duration = 600
playback_en = 1
playback_volume = 80
playback_file = "/mnt/extsd/test.wav"
motionAlarm_on = 0
motionAlarm_result_print_interval = 50 #fps
motionAlarm_sensitivity = 60 #[20,40,60,80,100]
motionAlarm_support_zone = 1
motionAlarm_left_up_x = 0
motionAlarm_left_up_y = 0
motionAlarm_left_bottom_x = 0
motionAlarm_left_bottom_y = 10000
motionAlarm_right_bottom_x = 10000
motionAlarm_right_bottom_y = 10000
motionAlarm_right_up_x = 10000
motionAlarm_right_up_y = 0
motionAlarm_useDefaultCfgEnable = 1
motionAlarm_HorizontalRegionNum = 15
motionAlarm_VerticalRegionNum = 8
motionAlarm_Threshold_High = 2
motionAlarm_Threshold_MediumHigh = 3
motionAlarm_Threshold_Default = 5
motionAlarm_Threshold_MediumLow = 10
motionAlarm_Threshold_Low = 36
main_enable = 1 #0:disable main stream, 1:enable main stream
main_rtsp_id = 0
main_isp = 0
main_isp_d3d_lbc_ratio = 0 #[100,400], 0:not set but use default, 100:lossless, 125:1.25x, 150:1.5x(default), 400:4x
main_vipp = 0
main_src_width = 1280
main_src_height = 720
main_pixel_format = "aw_lbc_2_5x" #nv21,nv12,yu12,yv12;aw_lbc_2_5x,aw_lbc_2_0x,aw_lbc_1_5x,aw_lbc_1_0x
main_wdr_enable = 0
main_vi_buf_num = 3
main_src_frame_rate = 20
main_vi_stitch_mode = 0 # 0: DMA_STITCH_NONE, 1: DMA_STITCH_2IN1_LINNER, 2: DMA_STITCH_HORIZONTAL, 3: DMA_STITCH_VERTICAL
main_viChn = 0
main_venc_chn = 0
main_encode_type = "H.264"
main_encode_width = 1280
main_encode_height = 720
main_encode_frame_rate = 20
main_encode_bitrate = 1048576 #5M:5242880, 2.5M:2621440, 2M:2097152, 1.5M:1572864, 1M:1048576, 0.5M:524288, 0.25M:262144
main_online_en = 0
main_online_share_buf_num = 2
main_encpp_enable = 1
main_ve_ref_frame_lbc_mode = 0 #0:default(1.5x), 1:1.5x, 2:2.0x, 3:2.5x, 4:no lossy
main_key_frame_interval = 30
main_file_path = "/mnt/extsd/mainStream" #if no path is specified, it will not be saved.
main_save_one_file_duration = 60 #unit:s, 0:Infinite duration.
main_save_max_file_cnt = 10
main_draw_osd_text = "main stream"
main_isp_test_enable = 0
main_isp_test_interval_ms = 2000
main_detect_mipi_desk_en = 0
main_detect_mipi_interv_ms = 1000
main_detect_mipi_channel = 0 # MIPI0/MIPIA: 0, MIPI1/MIPIB: 1
main_venc_recreate_enable = 0
main_venc_recreate_loop_cnt = -1 # loop count, -1:infinite
main_venc_recreate_interval = 10 #unit:s
main_venc_recreate_encoder = "H.264"
main_venc_recreate_framerate = 15
main_venc_recreate_bitrate = 1048576
main_venc_recreate_dst_width = 1280
main_venc_recreate_dst_height = 720
main_venc_recreate_key_frame_interval = 30
main_isp_tdm_raw_process_type = -1 #-1:disable, 0:dump 8bit, 1:dump 10bit, 2:dump 8bit for tools, 3:dump 10bit for tools, 4:send 8bit, 5:send 10bit
main_isp_tdm_raw_width = 1280
main_isp_tdm_raw_height = 720
main_isp_tdm_raw_rxbuf_num = 5
main_isp_tdm_raw_process_frame_cnt_min = 0
main_isp_tdm_raw_process_frame_cnt_max = 5
main_isp_tdm_raw_file_path = "/mnt/extsd/tdm_raw.bin"
main_offline_raw_simulate_type = -1 #-1:disable, 0:after reaching the end, start over from the beginning, 1: after reaching the end, read backwards.
main_offline_raw_type = 43 #39:BGGR8, 40:GBRG8, 41:GRBG8, 42:RGGB8, 43:BGGR10, 44:GBRG10, 45:GRBG10, 46:RGGB10, 47:BGGR12, 48:GBRG12, 49:GRBG12, 50:RGGB12
main_offline_raw_simulate_cnt_start = 0
main_offline_raw_simulate_cnt_end = 19
main_offline_raw_file_path = "/mnt/extsd/test.bin"
main_2nd_enable = 1
main_2nd_vipp = 4
main_2nd_src_width = 640
main_2nd_src_height = 480
main_2nd_pixel_format = "nv21"
main_2nd_vi_buf_num = 3
main_2nd_src_frame_rate = 20
main_2nd_vi_stitch_mode = 0 # 0: DMA_STITCH_NONE, 1: DMA_STITCH_2IN1_LINNER, 2: DMA_STITCH_HORIZONTAL, 3: DMA_STITCH_VERTICAL
main_2nd_viChn = 0
main_2nd_venc_chn = 2
main_2nd_encode_type = "H.264"
main_2nd_encode_width = 640
main_2nd_encode_height = 480
main_2nd_encode_frame_rate = 20
main_2nd_encode_bitrate = 262144
main_2nd_online_en = 0
main_2nd_online_share_buf_num = 2
main_2nd_encpp_enable = 1
main_2nd_ve_ref_frame_lbc_mode = 0
main_2nd_key_frame_interval = 30
main_2nd_file_path = #"/mnt/extsd/main2ndStream"
main_2nd_save_one_file_duration = 60
main_2nd_save_max_file_cnt = 10
main_2nd_take_picture = 1
main_2nd_take_picture_viChn = 1
main_2nd_take_picture_venc_chn = 8
main_2nd_take_picture_interval = 10 #unit:s
main_2nd_take_picture_file = "/mnt/extsd/main_2nd_pic"
main_2nd_take_picture_file_cnt = 10
main_2nd_take_picture_only_capture_yuv = 0
main_2nd_pdet_enable = 0
main_2nd_pdet_viChn = 2
main_2nd_pdet_input_width = 320
main_2nd_pdet_input_height = 192
main_2nd_pdet_input_channel = 3
main_2nd_pdet_conf_thres = 0.3
main_2nd_pdet_run_interval = 30 #unit:fps, default: framerate*2
sub_enable = 0 #0:disable sub stream, 1:enable sub stream
sub_rtsp_id = -1 #-1:disable sub rtsp
sub_isp = 1
sub_isp_d3d_lbc_ratio = 0 #[100,400], 0:not set but use default, 100:lossless, 125:1.25x, 150:1.5x(default), 400:4x
sub_vipp = 1
sub_src_width = 1280
sub_src_height = 720
sub_pixel_format = "aw_lbc_2_5x" #nv21,nv12,yu12,yv12;aw_lbc_2_5x,aw_lbc_2_0x,aw_lbc_1_5x,aw_lbc_1_0x
sub_wdr_enable = 0
sub_vi_buf_num = 3
sub_src_frame_rate = 15 #fps
sub_viChn = 0
sub_venc_chn = 1
sub_encode_type = "H.264"
sub_encode_width = 1280 #1280x720->720p, 1920x1080->1080p, 2304x1296->3M, 2560×1440->2k, 3840x2160->4k, 7680x4320->8k
sub_encode_height = 720
sub_encode_frame_rate = 15 #fps
sub_encode_bitrate = 1048576 #5M:5242880, 2.5M:2621440, 2M:2097152, 1.5M:1572864, 1M:1048576, 0.5M:524288, 0.25M:262144
sub_online_en = 0
sub_online_share_buf_num = 2
sub_encpp_enable = 1
sub_ve_ref_frame_lbc_mode = 0 #0:default(1.5x), 1:1.5x, 2:2.0x, 3:2.5x, 4:no lossy
sub_key_frame_interval = 30
sub_file_path = "/mnt/extsd/subStream" #if no path is specified, it will not be saved.
sub_save_one_file_duration = 60 #unit:s, 0:Infinite duration.
sub_save_max_file_cnt = 10
sub_draw_osd_text = "sub stream"
sub_venc_recreate_enable = 0
sub_venc_recreate_loop_cnt = -1 # loop count, -1:infinite
sub_venc_recreate_interval = 10 #unit:s
sub_venc_recreate_encoder = "H.264"
sub_venc_recreate_framerate = 15
sub_venc_recreate_bitrate = 1048576
sub_venc_recreate_dst_width = 1280
sub_venc_recreate_dst_height = 720
sub_venc_recreate_key_frame_interval = 30
sub_isp_tdm_raw_process_type = -1 #-1:disable, 0:dump 8bit, 1:dump 10bit, 2:dump 8bit for tools, 3:dump 10bit for tools, 4:send 8bit, 5:send 10bit
sub_isp_tdm_raw_width = 1280
sub_isp_tdm_raw_height = 720
sub_isp_tdm_raw_rxbuf_num = 5
sub_isp_tdm_raw_process_frame_cnt_min = 0
sub_isp_tdm_raw_process_frame_cnt_max = 5
sub_isp_tdm_raw_file_path = "/mnt/extsd/tdm_raw.bin"
sub_2nd_enable = 0
sub_2nd_vipp = 5
sub_2nd_src_width = 640
sub_2nd_src_height = 480
sub_2nd_pixel_format = "nv21"
sub_2nd_vi_buf_num = 3
sub_2nd_src_frame_rate = 15
sub_2nd_viChn = 0
sub_2nd_venc_chn = 3
sub_2nd_encode_type = "H.264"
sub_2nd_encode_width = 640
sub_2nd_encode_height = 480
sub_2nd_encode_frame_rate = 15
sub_2nd_encode_bitrate = 262144
sub_2nd_online_en = 0
sub_2nd_online_share_buf_num = 2
sub_2nd_encpp_enable = 1
sub_2nd_ve_ref_frame_lbc_mode = 0
sub_2nd_key_frame_interval = 30
sub_2nd_file_path = #"/mnt/extsd/sub2ndStream"
sub_2nd_save_one_file_duration = 60
sub_2nd_save_max_file_cnt = 10
sub_2nd_take_picture = 0
sub_2nd_take_picture_viChn = 1
sub_2nd_take_picture_venc_chn = 9
sub_2nd_take_picture_interval = 10 #unit:s
sub_2nd_take_picture_file = "/mnt/extsd/sub_2nd_pic"
sub_2nd_take_picture_file_cnt = 10
sub_2nd_take_picture_only_capture_yuv = 0
sub_2nd_pdet_enable = 0
sub_2nd_pdet_viChn = 2
sub_2nd_pdet_model_pathname = "/mnt/extsd/model/person_det_v4.0.0"
sub_2nd_pdet_input_width = 288
sub_2nd_pdet_input_height = 160
sub_2nd_pdet_input_channel = 3
sub_2nd_pdet_conf_thres = 0.3
sub_2nd_pdet_run_interval = 30 #unit:fps, default: framerate*2
three_enable = 0 #0:disable sub stream, 1:enable sub stream
three_rtsp_id = -1 #-1:disable sub rtsp
three_isp = 2
three_isp_d3d_lbc_ratio = 0 #[100,400], 0:not set but use default, 100:lossless, 125:1.25x, 150:1.5x(default), 400:4x
three_vipp = 2
three_src_width = 1280
three_src_height = 720
three_pixel_format = "aw_lbc_2_5x" #nv21,nv12,yu12,yv12;aw_lbc_2_5x,aw_lbc_2_0x,aw_lbc_1_5x,aw_lbc_1_0x
three_wdr_enable = 0
three_vi_buf_num = 3
three_src_frame_rate = 15 #fps
three_viChn = 0
three_venc_chn = 4
three_encode_type = "H.264"
three_encode_width = 1280 #1280x720->720p, 1920x1080->1080p, 2304x1296->3M, 2560×1440->2k, 3840x2160->4k, 7680x4320->8k
three_encode_height = 720
three_encode_frame_rate = 15 #fps
three_encode_bitrate = 1048576 #5M:5242880, 2.5M:2621440, 2M:2097152, 1.5M:1572864, 1M:1048576, 0.5M:524288, 0.25M:262144
three_encpp_enable = 1
three_ve_ref_frame_lbc_mode = 0 #0:default(1.5x), 1:1.5x, 2:2.0x, 3:2.5x, 4:no lossy
three_key_frame_interval = 30
three_file_path = "/mnt/extsd/threeStream" #if no path is specified, it will not be saved.
three_save_one_file_duration = 60 #unit:s, 0:Infinite duration.
three_save_max_file_cnt = 10
three_draw_osd_text = "three stream"
three_venc_recreate_enable = 0
three_venc_recreate_loop_cnt = -1 # loop count, -1:infinite
three_venc_recreate_interval = 10 #unit:s
three_venc_recreate_encoder = "H.264"
three_venc_recreate_framerate = 15
three_venc_recreate_bitrate = 1048576
three_venc_recreate_dst_width = 1280
three_venc_recreate_dst_height = 720
three_venc_recreate_key_frame_interval = 30
three_isp_tdm_raw_process_type = -1 #-1:disable, 0:dump 8bit, 1:dump 10bit, 2:dump 8bit for tools, 3:dump 10bit for tools, 4:send 8bit, 5:send 10bit
three_isp_tdm_raw_width = 1280
three_isp_tdm_raw_height = 720
three_isp_tdm_raw_rxbuf_num = 5
three_isp_tdm_raw_process_frame_cnt_min = 0
three_isp_tdm_raw_process_frame_cnt_max = 5
three_isp_tdm_raw_file_path = "/mnt/extsd/tdm_raw.bin"
three_2nd_enable = 0
three_2nd_vipp = 6
three_2nd_src_width = 640
three_2nd_src_height = 480
three_2nd_pixel_format = "nv21"
three_2nd_vi_buf_num = 3
three_2nd_src_frame_rate = 15
three_2nd_viChn = 0
three_2nd_venc_chn = 6
three_2nd_encode_type = "H.264"
three_2nd_encode_width = 640
three_2nd_encode_height = 480
three_2nd_encode_frame_rate = 15
three_2nd_encode_bitrate = 262144
three_2nd_online_en = 0
three_2nd_online_share_buf_num = 2
three_2nd_encpp_enable = 1
three_2nd_ve_ref_frame_lbc_mode = 0
three_2nd_key_frame_interval = 30
three_2nd_file_path = #"/mnt/extsd/three2ndStream"
three_2nd_save_one_file_duration = 60
three_2nd_save_max_file_cnt = 10
three_2nd_take_picture = 0
three_2nd_take_picture_viChn = 1
three_2nd_take_picture_venc_chn = 10
three_2nd_take_picture_interval = 10 #unit:s
three_2nd_take_picture_file = "/mnt/extsd/three_2nd_pic"
three_2nd_take_picture_file_cnt = 10
three_2nd_take_picture_only_capture_yuv = 0
three_2nd_pdet_enable = 0
three_2nd_pdet_viChn = 2
three_2nd_pdet_model_pathname = "/mnt/extsd/model/person_det_v4.0.0"
three_2nd_pdet_input_width = 288
three_2nd_pdet_input_height = 160
three_2nd_pdet_input_channel = 3
three_2nd_pdet_conf_thres = 0.3
three_2nd_pdet_run_interval = 30 #unit:fps, default: framerate*2
four_enable = 0 #0:disable sub stream, 1:enable sub stream
four_rtsp_id = -1 #-1:disable sub rtsp
four_isp = 3
four_isp_d3d_lbc_ratio = 0 #[100,400], 0:not set but use default, 100:lossless, 125:1.25x, 150:1.5x(default), 400:4x
four_vipp = 3
four_src_width = 1280
four_src_height = 720
four_pixel_format = "aw_lbc_2_5x" #nv21,nv12,yu12,yv12;aw_lbc_2_5x,aw_lbc_2_0x,aw_lbc_1_5x,aw_lbc_1_0x
four_wdr_enable = 0
four_vi_buf_num = 3
four_src_frame_rate = 15 #fps
four_viChn = 0
four_venc_chn = 5
four_encode_type = "H.264"
four_encode_width = 1280 #1280x720->720p, 1920x1080->1080p, 2304x1296->3M, 2560×1440->2k, 3840x2160->4k, 7680x4320->8k
four_encode_height = 720
four_encode_frame_rate = 15 #fps
four_encode_bitrate = 1048576 #5M:5242880, 2.5M:2621440, 2M:2097152, 1.5M:1572864, 1M:1048576, 0.5M:524288, 0.25M:262144
four_encpp_enable = 1
four_ve_ref_frame_lbc_mode = 0 #0:default(1.5x), 1:1.5x, 2:2.0x, 3:2.5x, 4:no lossy
four_key_frame_interval = 30
four_file_path = "/mnt/extsd/fourStream" #if no path is specified, it will not be saved.
four_save_one_file_duration = 60 #unit:s, 0:Infinite duration.
four_save_max_file_cnt = 10
four_draw_osd_text = "four stream"
four_venc_recreate_enable = 0
four_venc_recreate_loop_cnt = -1 # loop count, -1:infinite
four_venc_recreate_interval = 10 #unit:s
four_venc_recreate_encoder = "H.264"
four_venc_recreate_framerate = 15
four_venc_recreate_bitrate = 1048576
four_venc_recreate_dst_width = 1280
four_venc_recreate_dst_height = 720
four_venc_recreate_key_frame_interval = 30
four_isp_tdm_raw_process_type = -1 #-1:disable, 0:dump 8bit, 1:dump 10bit, 2:dump 8bit for tools, 3:dump 10bit for tools, 4:send 8bit, 5:send 10bit
four_isp_tdm_raw_width = 1280
four_isp_tdm_raw_height = 720
four_isp_tdm_raw_rxbuf_num = 5
four_isp_tdm_raw_process_frame_cnt_min = 0
four_isp_tdm_raw_process_frame_cnt_max = 5
four_isp_tdm_raw_file_path = "/mnt/extsd/tdm_raw.bin"
four_2nd_enable = 0
four_2nd_vipp = 7
four_2nd_src_width = 640
four_2nd_src_height = 480
four_2nd_pixel_format = "nv21"
four_2nd_vi_buf_num = 3
four_2nd_src_frame_rate = 15
four_2nd_viChn = 0
four_2nd_venc_chn = 7
four_2nd_encode_type = "H.264"
four_2nd_encode_width = 640
four_2nd_encode_height = 480
four_2nd_encode_frame_rate = 15
four_2nd_encode_bitrate = 262144
four_2nd_online_en = 0
four_2nd_online_share_buf_num = 2
four_2nd_encpp_enable = 1
four_2nd_ve_ref_frame_lbc_mode = 0
four_2nd_key_frame_interval = 30
four_2nd_file_path = #"/mnt/extsd/four2ndStream"
four_2nd_save_one_file_duration = 60
four_2nd_save_max_file_cnt = 10
four_2nd_take_picture = 0
four_2nd_take_picture_viChn = 1
four_2nd_take_picture_venc_chn = 11
four_2nd_take_picture_interval = 10 #unit:s
four_2nd_take_picture_file = "/mnt/extsd/four_2nd_pic"
four_2nd_take_picture_file_cnt = 10
four_2nd_take_picture_only_capture_yuv = 0
four_2nd_pdet_enable = 0
four_2nd_pdet_viChn = 2
four_2nd_pdet_model_pathname = "/mnt/extsd/model/person_det_v4.0.0"
four_2nd_pdet_input_width = 288
four_2nd_pdet_input_height = 160
four_2nd_pdet_input_channel = 3
four_2nd_pdet_conf_thres = 0.3
four_2nd_pdet_run_interval = 30 #unit:fps, default: framerate*2


























































