Banana Pi BPI-F4 工业控制板采用凌阳 SP7350 四核 Arm Cortex-A55 处理器,并集成 4.1 TOPS NPU。它提供丰富的 I/O 接口,可连接多种外部设备,为用户开发 AI 软件和应用提供紧凑、稳定的平台。
BPI-F4 是 Banana Pi 开源社区与凌阳科技联合开发的官方开源硬件开发板。
| 更多信息: 香蕉派 BPI-F4 |
BPI-F4 核心板和底板
电源:DC 插头直径为 5.5 mm
电源适配器的输出电流必须大于 1 A。
系统安装介质(任选一种)
MicroSD/TF 卡启动
一张 Class 10 或更高等级、容量至少为 8 GB 的 MicroSD/TF(SDHC)卡,以及一个读卡器
以下高速 TF 卡已经 ArmSoM 团队测试:
SanDisk 32 GB TF(MicroSD)卡(推荐开发使用)
SanDisk 32 GB TF(MicroSD)行车记录仪/监控摄像机存储卡(推荐长期运行使用)
闪迪 TF 8G Class10 microSD
闪迪 TF 128G Class10 microSD XC TF 128G 48MB/S:
板载 eMMC 启动
USB 键盘和鼠标
HDMI 显示器和 HDMI 线缆
BPI-F4 支持 1080p、720p 和 480p 分辨率
以太网线
BPI-F4 支持 10M/100M/1000M 传输
网线用于将 BPI-F4 连接到本地网络和互联网
摄像头模组
BPI-F4 支持摄像头功能
推荐使用 OV5647 摄像头
LCD 显示屏
插上跳线帽后,开发板会在通电时自动开机。 不安装跳线帽时,需要按住 Wake-up 键 1 秒开机。
插上跳线帽时选择 USB 3.0 Type-C 接口;不安装跳线帽时选择 USB 3.0 Type-A 接口。
电压选择跳线:3.3 V
电压选择跳线:5.0 V
| 启动设备 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
eMMC 启动 |
1 |
1 |
1 |
1 |
SDC 启动/ISP |
1 |
1 |
0 |
0 |
USB ISP |
1 |
1 |
0 |
1 |
例如,下图所示拨码状态用于从 SD 卡启动。
|
此方法适用于 Ubuntu 镜像。
使用 Balena Etcher 写入镜像。 Balena Etcher 是 Balena 提供的开源图形化镜像写入工具,可将操作系统镜像写入 SD 卡或 U 盘。 |
单击“Flash from file”选择镜像。
单击“Select target”选择目标存储设备。
单击“Flash!”开始写入。
要从 SD 卡启动,请将启动开关调整为 [1 1 0 0]
将 SD 卡插入微型 SD 卡插槽。
插上跳线帽后,开发板会在通电时自动开机;否则需要按住 Wake-up 键 1 秒开机。
| 首次启动桌面版镜像时请连接 HDMI 显示器,并按照桌面向导创建用户。 |
首先检查 U 盘的文件系统是否为 FAT32 或 FAT16。
如果不是,可使用以下命令将其格式化为 FAT32;如果已经是 FAT32 或 FAT16,则跳过此步骤。
sudo umount /dev/sdb1
sudo mkfs.vfat -F 32 -n "DATA" /dev/sdb1
将下载的 eMMC 镜像文件解压到 U 盘。
将启动选择开关拨到 USB 模式。
U 盘插入 USB 3.0 Type-A、USB 3.0 Type-C 或 USB 2.0 Type-A 接口时均可用于升级。
将 U 盘插入 USB 3.0 Type-A 接口(无需短接跳线)。
将 U 盘插入 USB 3.0 Type-C 接口(使用此接口时必须短接跳线)。
将 U 盘插入 USB 2.0 Type-A 接口。
上电后,会自动进入升级过程。升级完成后日志如下:
烧录完成后关闭电源,将拨码开关设为 1111;再次上电后,开发板将从 eMMC 启动。
1. 首先确认有足够的存储空间
df -h
2. 从 GitHub 获取代码
git clone https://github.com/sunplus-plus1/smzf.git -b master
cd smzf
3. 子模块默认通过 SSH 拉取。如果尚未配置 SSH 密钥,需要将地址改为 HTTPS
nano .gitmodules
将其中两个 URL 修改为:
url = https://github.com/sunplus-plus1/nnthirdparty.git
url = https://github.com/sunplus-plus1/model-zoo.git
4. 拉取子模块
git submodule sync --recursive
git submodule update --init --recursive --remote
5. 修改 DNS
sudo nano /etc/resolv.conf
# 添加以下内容:
nameserver 8.8.8.8
6. 安装 CMake
sudo apt update
sudo apt install cmake
7. 解压以下三个文件
cd ./nnthirdparty/libtorch
tar -xzf libtorch.tar.gz
cd ..
cd ffmpeg/
tar -xzf 9.2.tar.gz
cd ..
cd opencv/
tar -xzf 4.2.tar.gz
8. 解压完成后编译项目
cd ..
cd ..
./build.sh --c3v
9. 进入 release 目录,并使用 ldd 检查缺少的依赖
export LD_LIBRARY_PATH=$(pwd)/lib:$(pwd)/nnthirdparty/jsoncpp/lib:$(pwd)/nnthirdparty/NADKLogger/lib:$(pwd)/nnthirdparty/NADKRoutines/lib:$(pwd)/nnthirdparty/nnbase/lib:$(pwd)/nnthirdparty/libtorch/lib:$LD_LIBRARY_PATH
10. 运行 AI 模型;以下以摄像头图像检测为例
./bin/nnModel -m Yolo11sDetectionHybridI8 -v /dev/video42
这里使用与 Raspberry Pi CM4 尺寸和规格相同的散热器,可有效降低核心板温度,保证设备稳定运行。
| 测试项目 | 裸板 CPU | 裸板 DDR | 裸板 eMMC | 安装散热器 |
|---|---|---|---|---|
测试 5 分钟后的温度 |
81.4°C |
66.8°C |
60.9°C |
55.7°C |
测试结束时的温度 |
79.8°C |
64.7°C |
59.5°C |
52.6°C |
| 根据测试结果,安装散热器后的温度比裸板低 10~20 °C。 |
| AI 工作负载 | 裸板 CPU | 裸板 DDR | 裸板 eMMC | 安装散热器 |
|---|---|---|---|---|
摄像头 AI 识别 |
69.5°C |
59.0°C |
54.3°C |
51.2°C |
视频 AI 识别 |
95.9°C |
75.3°C |
66.8°C |
61.2°C |
| 运行 AI 模型时,散热器的降温效果更为明显;安装散热器后的温度比裸板低 10~30 °C。 |
首次使用 Banana Pi BPI-F4 时,请先熟悉各个外设接口,以便理解以下内容。
1. 将网线一端插入以太网接口,另一端连接到网络正常的路由器。
2. 系统启动后会自动为以太网接口分配 IP 地址,无需额外配置。
3. 使用以下命令查看 IP 地址:
pi@ubuntu:~$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.114 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::a8ef:1ac3:d737:32b9 prefixlen 64 scopeid 0x20<link>
ether 1c:50:1e:f1:d4:f7 txqueuelen 1000 (Ethernet)
RX packets 49156 bytes 72810833 (72.8 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 7994 bytes 617977 (617.9 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 38 base 0xa000
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 260 bytes 24520 (24.5 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 260 bytes 24520 (24.5 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
4. 使用 ping 工具检查网络连通性。
测试命令如下;按 Ctrl+C 可停止 ping。
pi@ubuntu:~$ sudo ping www.baidu.com
PING www.a.shifen.com (183.2.172.177) 56(84) bytes of data.
64 bytes from 183.2.172.177: icmp_seq=1 ttl=52 time=9.10 ms
64 bytes from 183.2.172.177: icmp_seq=2 ttl=52 time=10.6 ms
64 bytes from 183.2.172.177: icmp_seq=3 ttl=52 time=9.07 ms
64 bytes from 183.2.172.177: icmp_seq=4 ttl=52 time=9.23 ms
64 bytes from 183.2.172.177: icmp_seq=5 ttl=52 time=8.85 ms
64 bytes from 183.2.172.177: icmp_seq=6 ttl=52 time=8.85 ms
64 bytes from 183.2.172.177: icmp_seq=7 ttl=52 time=9.26 ms
^C
--- www.a.shifen.com ping statistics ---
7 packets transmitted, 7 received, 0% packet loss, time 6010ms
rtt min/avg/max/mdev = 8.845/9.276/10.566/0.548 ms
| HDMI 输出接口 | 支持 1080p、720p 和 480p 分辨率 |
|---|
使用 HDMI 线缆将开发板连接到 HDMI 显示器。
Linux 系统启动后,如果 HDMI 显示器能正常显示画面,则 HDMI 接口工作正常。
| 许多笔记本电脑虽有 HDMI 接口,但通常只支持输出,不支持 HDMI 输入,因此不能直接显示开发板输出的画面。连接前请确认笔记本电脑支持 HDMI 输入。如果显示器没有画面,还应确认安装的是桌面版系统;服务器版可能只显示终端。 |
1. HDMI 转 VGA 显示测试
所需配件:HDMI 转 VGA 转换器
2. 一条 VGA 线和一台带 VGA 接口的显示器
HDMI 转 VGA 显示测试如下图所示:
BPI-F4 提供一个 USB 3.0 Type-A 接口、一个 USB 3.0 Type-C 接口和一个 USB 2.0 Type-A 接口。
| USB 3.0 Type-A 与 Type-C 共用 SP7350 的同一个 USB 3.0 端口,不能同时使用。插上跳线帽时选择 Type-C 接口;不安装跳线帽时选择 Type-A 接口。 |
1. 将 USB 键盘或鼠标插入开发板的 USB 接口。
2. 将开发板连接到 HDMI 显示器。
3. 如果键盘或鼠标能正常操作系统,则 USB 接口工作正常(鼠标仅适用于桌面版系统)。
1. 将 U 盘或 USB 移动硬盘插入开发板的 USB 接口。
2. 运行以下命令;如果输出中出现 sdX 设备,则表示 USB 存储设备已被识别:
sunplus@ubuntu:~$ cat /proc/partitions | grep "sd*"
major minor #blocks name
8 0 3932160 sda
3. 使用 mount 命令将 USB 存储设备挂载到 /test,然后即可查看其中的文件:
sunplus@ubuntu:/dev$ sudo mkdir /test
sunplus@ubuntu:/dev$ sudo mount /dev/sda /test/
4. 挂载后,使用 df -h 命令查看设备容量使用情况和挂载点:
sunplus@ubuntu:/dev$ df -h | grep "sd"
/dev/sda 3.8G 16K 3.8G 1% /test
所需配件:OV5647 摄像头模块
| OV5647 规格 | |
|---|---|
照片分辨率 |
最高 5 MP(2592 × 1944,共 5,038,848 像素) 像素大小 |
1.4 x 1.4 μm 光学尺寸 |
1/4" 镜头 |
f=3.6 mm,f/2.9 视场角 |
54° × 41° 最大视频分辨率 |
1080p@30fps 最大帧率 |
480p@90fps 最长曝光时间(秒) |
0.97 可选视频分辨率 |
1080p@30fps、720p@60fps、480p@90fps |
摄像头模块采用 OV5647 传感器。连接模块并开机后,使用 v4l2-ctl --all --device /dev/video42 命令查看设备的完整信息。连接时请勿插反,排线金手指应朝向跳线帽。
pi@ubuntu:~$ v4l2-ctl --all --device /dev/video42
Driver Info:
Driver name : sp_vin
Card type : SP_VIN
Bus info : platform:f8005a80.video
Driver version : 6.6.47
Capabilities : 0xa5200001
Video Capture
I/O MC
Read/Write
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x25200001
Video Capture
I/O MC
Read/Write
Streaming
Extended Pix Format
Media Driver Info:
Driver name : sp_vin
Model : sunplus,sp7350-vin
Serial :
Bus info : platform:f8005a80.video
Media version : 6.6.47
Hardware revision: 0x00000000 (0)
Driver version : 6.6.47
Interface Info:
ID : 0x03000011
Type : V4L Video
Entity Info:
ID : 0x0000000f (15)
Name : VIN10 output
Function : V4L2 I/O
Pad 0x01000010 : 0: Sink
Link 0x02000013: from remote pad 0x1000003 of entity 'sp_csi2 f8005500.csirx' (Video Pixel Formatter): Data, Enabled
Priority: 2
Video input : 0 (VIN10 output: ok)
Format Video Capture:
Width/Height : 1920/1080
Pixel Format : 'pGAA' (10-bit Bayer GBGB/RGRG Packed)
Field : None
Bytes per Line : 2400
Size Image : 2592000
Colorspace : Raw
Transfer Function : Default (maps to None)
YCbCr/HSV Encoding: Default (maps to ITU-R 601)
Quantization : Default (maps to Full Range)
Flags :
User Controls
white_balance_automatic 0x0098090c (bool) : default=0 value=1
exposure 0x00980911 (int) : min=4 max=1100 step=1 default=1000 value=980
gain_automatic 0x00980912 (bool) : default=0 value=1
horizontal_flip 0x00980914 (bool) : default=0 value=0 flags=modify-layout
vertical_flip 0x00980915 (bool) : default=0 value=0 flags=modify-layout
alpha_component 0x00980929 (int) : min=0 max=255 step=1 default=255 value=255
Camera Controls
auto_exposure 0x009a0901 (menu) : min=0 max=1 default=1 value=1 (Manual Mode)
0: Auto Mode
1: Manual Mode
Image Source Controls
vertical_blanking 0x009e0901 (int) : min=24 max=31687 step=1 default=24 value=24
horizontal_blanking 0x009e0902 (int) : min=496 max=496 step=1 default=496 value=496 flags=read-only
analogue_gain 0x009e0903 (int) : min=16 max=1023 step=1 default=32 value=32
Image Processing Controls
pixel_rate 0x009f0902 (int64) : min=81666700 max=81666700 step=1 default=81666700 value=81666700 flags=read-only
使用 v4l2-ctl -d /dev/video42 --set-ctrl params=value 命令设置设备控制项。
启用 auto_exposure(自动曝光):
v4l2-ctl -d /dev/video42 --set-ctrl auto_exposure=1
启用 gain_automatic(自动增益):
v4l2-ctl -d /dev/video42 --set-ctrl gain_automatic=1
启用 white_balance_automatic(自动白平衡):
v4l2-ctl -d /dev/video42 --set-ctrl white_balance_automatic=1
使用以下命令查询设备支持的视频格式:
pi@ubuntu:~$ v4l2-ctl --list-formats-ext --device /dev/video42
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture
[0]: 'GBRG' (8-bit Bayer GBGB/RGRG)
Size: Discrete 640x480
[1]: 'GB10' (10-bit Bayer GBGB/RGRG)
Size: Discrete 2592x1944
Size: Discrete 1920x1080
Size: Discrete 1296x972
Size: Discrete 640x480
[2]: 'pGAA' (10-bit Bayer GBGB/RGRG Packed)
Size: Discrete 2592x1944
Size: Discrete 1920x1080
Size: Discrete 1296x972
Size: Discrete 640x480
使用 v4l2-ctl 捕获图像:
pi@ubuntu:~$ v4l2-ctl -d /dev/video42 --set-fmt-video=width=1920,height=1080,pixelformat=pGAA --stream-mmap=3 --stream-to=/home/sunplus/Videos/ov5647.raw --stream-skip=9 --stream-count=1
<<<<<<<<<<<<<<<<<<<<
pi@ubuntu:~$
插入并挂载 U 盘,然后将生成的 OV5647 RAW 文件复制到 U 盘。
pi@ubuntu:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 1 57.7G 0 disk
└─sda1 8:1 1 57.7G 0 part
mmcblk1 179:0 0 14.8G 0 disk
├─mmcblk1p1 179:1 0 256M 0 part
└─mmcblk1p2 179:2 0 14.6G 0 part /
mmcblk0 179:8 0 29.2G 0 disk
mmcblk0boot0 179:16 0 4M 1 disk
mmcblk0boot1 179:24 0 4M 1 disk
pi@ubuntu:~$ mount /dev/sda1 /mnt/usb
pi@ubuntu:~$ cp /home/sunplus/Videos/ov5647-111.raw /mnt/usb
pi@ubuntu:~$ll /mnt/usb
total 2596
drwxr-xr-x 2 root root 32768 Jan 1 1970 ./
drwxr-xr-x 4 root root 4096 Aug 21 22:31 ../
-rwxr-xr-x 1 root root 2592000 Aug 21 23:13 ov5647-111.raw*
从 PixelViewer | Carina Studio 下载 RAW 图像查看器。