7-功能扩展
-
1.1 视频输入
1.2 视频输出
- EdgeBoard适配wifi上网卡
- EdgeBoard适配4G上网卡
- EdgeBoard控制GPIO输出
- EdgeBoard控制串口输出
- EdgeBoard系统卡扩容方法
EdgeBoard视频输入和输出
视频输入
EdgeBoard 支持多种接口的摄像头输入,支持USB摄像头、MIPI 摄像头、BT1120摄像头、GIGE接口工业相机、以及网络摄像头的视频输入。点击下载摄像头推荐列表。
1、usb摄像头
usb摄像头包括USB2.0和USB3.0接口,支持免驱动,或支持安装摄像头配套的linux驱动程序,视频格式支持YUV格式、MJPG格式以及RGB格式,针对sample示例工程的视频预测,可直接使用usb摄像头进行视频预测,不用考虑视频采集或抽帧等环节,可直接验证模型效果。
2、网络摄像机
EdgeBoard FZ5C/FZ5D内含硬解码芯片,以及FZ9D含外部视频处理芯片hi3536,视频解码速度大幅提升,可以支持RTSP标准输出的网络摄像机,可将网络摄像头数据解码为可处理的原始码流,在最新的EdgeBoard软核版本中,网络摄像机型号不仅限于摄像头推荐列表中的型号。
3、HDMI视频输入
在没有其他视频源的情况下,可使用HDMI输出的视频(例如电脑、电视、视频盒子等HDMI输出)接入到EdgeBoard FZ9D中进行视频分析,极大的放宽了用户使用的限制条件。
4、mipi摄像头
对于一些需要MIPI摄像头支持的嵌入式应用场景的设备,也提供了一块MIPI镜头模组作为配件,并已经做了mipi专用的系统以及软硬件上的支持,由于资源限制,仅FZ9A/B出厂带有mipi功能,其他带有mipi接口的EdgeBoard FZ系列则需要提供专用mipi镜像才可正常使用且均支持1.4.0及以下版本,1.5.1不支持,配套的MIPI Camera 型号AR20-7022-F0可以在百度AI市场进行购买(购买时需要备注:请发配套的异面FPC排线(料号:103526))
5、BT1120摄像头
EdgeBoard通过BT1120协议接收原始数据进行推理后,可以把结果通过串口、SPI传回IPC。在支持BT1120协议的IPC相机中,EdgeBoard可以作为一个深度学习加速设备,IPC保持原有的正常功能。类似的IPC模组后续将作为EdgeBoard配件上架AI市场。如果开发者自己有类似的设备,可以参考硬件说明,进行对应的硬件接口适配。BT1120仅可在1.4.0及以下版本可用,1.5.1版本不支持。
6、GIGE工业相机
一般GIGE工业相机有单独配套的驱动,EdgeBoard需要安装相应的驱动才可以正常使用,目前EdgeBoard已支持两款GIGE相机。
视频输出
EdgeBoard硬件配有DP(FZ9A/B系列)或miniDP(FZ5&FZ3&FZ9D系列)输出接口,可连接显示器用于视频输出等,由于显示器接口众多,如果显示器没有对应的DP或miniDP输入接口,可使用转换器进行接口转换。下面以EdgeBoard为miniDP接口为例
1.显示器为DP接口:使用公对公的mini DP转DP线连接显示器即可。
2.HDMI接口显示器:需要使用【注意:主动式miniDP公转HDMI母】转换线来连接EdgeBoard和HDMI显示器。参考链接
3.VGA显示器:使用miniDP公转VGA母转接线连接EdgeBoard FZ3和VGA显示器即可。参考链接
EdgeBoard提供的软件系统支持一个精简版的Linux桌面环境,可以用来实时显示程序运行的效果。
在上电使用前请确保显示器和EdgeBoard已经通过miniDP连接线连接好,进入系统后默认是进入终端命令行的环境。可以通过以下命令进入和退出桌面环境
startx //打开桌面环境
stopx //关闭桌面环境
对于我们提供的演示示例,本身通过opencv已经支持将预测结果可视化的通过桌面窗口显示出来,且桌面环境仅用于演示。
EdgeBoard适配wifi上网卡
1 说明
本说明适用于edgeboard平台petalinux工具构建的18.3版本的文件系统和1.3.0版本以上的软核,以及当前支持的使用Realtek RTL8188CUS芯片的网卡。
2 已经验证的网卡及芯片型号
厂家 | 型号 | 芯片 | 购买链接 |
---|---|---|---|
EDIMAX | N150 | Realtek RTL8188CUS | https://item.jd.com/43939956915.html |
netcore磊科 | NW336 | RTL8188CUS |
3 准备
- 查看内核默认是否支持usb无线网卡 插入USB无线网卡,串口或者dmesg命令查看内核是否打印以下信息,如果没有说明默认不支持。需要安装相关驱动及固件
usb 1-1.2: New USB device found, idVendor=0bda, idProduct=8176
[10172.874613] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[10172.881926] usb 1-1.2: Product: 802.11n WLAN Adapter
[10172.886882] usb 1-1.2: Manufacturer: Realtek
[10172.891144] usb 1-1.2: SerialNumber: 00e04c000001
[10172.922507] rtl8192cu: Chip version 0x10
[10172.964510] rtl8192cu: Board Type 0
[10172.968088] rtl_usb: rx_max_size 15360, rx_urb_num 8, in_ep 1
[10172.974466] rtl8192cu: Loading firmware rtlwifi/rtl8192cufw_TMSC.bin
也可以查看wlan接口是否加载,ifconfig -a, 如果发现wlan0设备,说明系统已经支持 另外,已经验证发布的zu5 1.3.0版本内核image.ub已经带了该模块, 可以不需要单独的ko驱动,如果未发现wlan0设备,可使用我们提供好的驱动和固件。
4 安装驱动(初次使用需安装)
- 下载驱动和固件 我们提供了已经编译好的驱动文件,以及依赖的官方固件程序。
- 先备份系统文件
cp -a /lib/modules/ /lib/modules_bak
- 拷贝文件modules_zu5_183.tgz到板子上,并解压,如果第一步已经支持,可以略过
tar -xzvf modules_zu5_183.tgz -C /lib/
depmod
- 拷贝文件firmware_183_wifi.zip到板子上,并解压、复制
unzip firmware_183_wifi.zip
mkdir /lib/firmware/rtlwifi/
cp -a firmware_183/* /lib/firmware/rtlwifi/
5 应用配置
驱动和固件安装完成后,下一步是wifi热点的配置,edgeboard提供了wifi配置工具为wpa_supplicant,是Linux常用WIFI配置组件,可以搜索相关教程进行详细设置, 这里给出简单示例 启动wifi适配器
ip link set wlan0 up
使用命令 wpa_supplicant 及 wpa_cli 配置WIFI连接 备份配置文件 /etc/wpa_supplicant.conf
cp /etc/wpa_supplicant.conf /etc/wpa_supplicant.conf_bak
修改配置文件 /etc/wpa_supplicant.conf ,为如下内容
ctrl_interface=/var/run/wpa_supplicant
update_config=1
启动wpa_supplicant服务工具
wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf > /dev/null &
其中wlan0为适配器接口名称,有可能变化,可根据ifconfig -a
命令获取具体命令 使用命令行工具wpa_cli加入热点, 其为交互式命令行,根据顺序输入各子命令即可,输入命令 wpa_cli
add_network
0
set_network 0 ssid "SSID名称"
OK
set_network 0 psk "SSID密码"
OK
enable_network 0
OK
save
OK
q
退出 ,然后配置IP地址为动态IP,可以使用命令行
udhcpc -i wlan0
或者配置IP为静态IP,可以使用ifconfig命令,手动配置,也可以设置/etc/network/interfaces
文件,内容类似如下
auto wlan0
iface wlan0 inet static
address 192.168.1.28
netmask 255.255.255.0
network 192.168.1.0
gateway 192.168.1.253
6 常见问题
- 启动WIFI适配器时候,如果提示错误:RTNETLINK answers: Operation not possible due to RF-kill 可以使用下面命令解决。该问题参考这里有详细说明
rfkill unblock all
-
连接失败,提示认证失败 系统默认启动了一个wpa_supplicant服务,会连接默认配置,造成用户配置冲突,可以先杀死该进程,再启动自己的服务。
查看相关进程
ps -ef | grep wpa
杀掉所有wpa_supplicant服务后重新启动
pkill -9 wpa_supplicant<br>
wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf > /dev/null &<br>
- 都配置成功后,仍然ping不通,请关掉eth0有线连接。因为两个网络不能配置同一个网段
ifconfig eth0 down
EdgeBoard适配4G上网卡
1 说明
USB 4G网卡不是单独的一个标准模块,不同厂家实现的方式不同,具体使用方法需要根据其具体产品来验证,这里给出一个产品使用示例。
2 已适配型号
ZTE中兴 MF79U
3 内部实现
通过查看说明书及使用验证,从概念上可以把该设备理解为以下网络结构,包含了无线wifi的LAN口,有线的LAN口(USB NDIS实现),无线的WAN口拨号猫。这样,围绕该设备可以建立一个小型局域网
4 激活及联网说明
详细请查阅说明书,或者咨询售后。对于SIM卡的激活可能需要售后操作。
5 针对此型号的EdgeBoard使用方案
在接入EB之前,请参考说明书对4G网卡配置完成,并确保可以联网,再进行下一步操作
方案一:
将4G网卡直接插入EB的USB口,作为本地第二个有线网卡使用,其他设备通过wifi接入进来。 该方案依赖的CDC RNDIS网卡驱动已经内置在发布的软核当中,可以直接使用
方案二:
将4G网卡作为WIFI热点,EdgeBoard及其他设备都通过WIFI接入。
方案二需要增加一块USB WIFI模块,增加了成本,而且稳定性也不如方案一,推荐使用方案一。
EdgeBoard控制GPIO输出
说明
FZ5A/FZ5B GPIO
连接器原理图
FZ5A/B目前的两路GPIO输出为12针扩展口J24的PS_MIO12和PS_MIO24,其他管脚没有GPIO功能
FZ5A/FZ5B预留的GPIO管脚见下表
J24 pin | 对应fpga端口 | 183 1.5.1系统对应的gpio number |
---|---|---|
pin3 | PS_MIO12 | 349 |
pin4 | PS_MIO24 | 361 |
FZ5C/FZ5D GPIO
连接器原理图
FZ5C/D目前有GPIO输出功能的为J15连接器对应的PS_MIO,其他PL端管脚没有配置GPIO功能
FZ5C/FZ5D预留的GPIO管脚见下表
J15 pin | GPIO接口 | 191 1.5.1系统对应的gpio number | 备注 |
---|---|---|---|
pin53 | PS_MIO6 | 338+6=344 | 系统内base_gpio为338+6(ps中mio gpio的端口号)=344 |
pin55 | PS_MIO7 | 345 | |
pin54 | PS_MIO10 | 348 | |
pin56 | PS_MIO11 | 349 | |
pin60 | PS_MIO44 | 382 |
FZ9D GPIO
连接器原理图
FZ9D预留的GPIO管脚见下表
J72 pin | J72对应信号 | 对应PL端pin | 191 1.5.2系统对应的gpio number | 备注 |
---|---|---|---|---|
pin5 | EX_IO_1P | B50_L12_P | 332+78+6=416 | PL端的GPIO是:系统内base_gpio为332+78(pl映射emio的IO号)+6(ip的pin的端口号)=416 |
pin6 | EX_IO_1N | B50_L12_N | 417 | |
pin7 | EX_IO_2P | B50_L10_N | 418 | |
pin8 | EX_IO_2N | B50_L10_P | 419 | |
pin9 | EX_IO_3P | B44_L8_P | 420 | |
pin10 | EX_IO_3N | B44_L8_N | 421 | |
pin11 | EX_IO_4P | B44_L6_P | 422 | |
pin12 | EX_IO_4N | B44_L6_N | 423 | |
pin13 | EX_IO_5P | B44_L9_N | 424 | |
pin14 | EX_IO_5N | B44_L9_P | 425 | |
pin15 | EX_IO_6P | B50_L6_P | 426 | |
pin16 | EX_IO_6N | B50_L6_N | 427 | |
pin17 | EX_IO_7P | B50_L5_P | 428 | |
pin18 | EX_IO_7N | B50_L5_N | 429 | |
pin19 | EX_IO_8P | B50_L1_P | 430 | |
pin20 | EX_IO_8N | B50_L1_N | 431 | |
pin21 | EX_IO_9P | B50_L2_P | 432 | |
pin22 | EX_IO_9N | B50_L2_N | 433 | |
pin23 | EX_IO_10P | B50_L3_P | 434 | 系统内部已使用 |
pin24 | EX_IO_10N | B50_L3_N | 435 | 系统内部已使用 |
pin25 | EX_PS_MIO26 | PS_MIO26 | 332+26=358 | PS端的GPIO是:系统内base_gpio为332+26(ps中mio gpio的端口号)=358 |
pin26 | EX_PS_MIO33 | PS_MIO33 | 332+33=365 |
操作步骤
1、确定GPIO输出引脚
以FZ5A/B为例,查看gpiochip,依据官方文档gpio number为base_gpio + other_gpio,所以PS_MIO12对应的gpio number为337+12=349
其他gpio number计算方法相同,请参考上面的预留gpio列表,在最新系统中gpionumber已给出。
2、操作GPIO管脚
具体步骤为:
- 输出一个GPIO
- 读取GPIO的direction和value
- 控制GPIO的direction和value
具体操作如下:
//在EdgeBoard系统中操作如下命令
//建立PS_MIO12为GPIO
echo 349 > /sys/class/gpio/export
//查看PS_MIO12预置的direction和value
cat /sys/class/gpio/gpio349/direction
cat /sys/class/gpio/gpio349/value
//控制PS_MIO12方向为out,并输出低电平
echo out > /sys/class/gpio/gpio349/direction
echo 0 > /sys/class/gpio/gpio349/value
见下图:
DEMO
# gpiodemo.py
import os
from time import sleep
# 建立gpio和设置方向
def set_gpio_output(gpio_num):
os.system("echo {} > /sys/class/gpio/export".format(gpio_num))
os.system("echo out > /sys/class/gpio/gpio{}/direction".format(gpio_num))
# 释放gpio
def release_gpio_output(gpio_num):
os.system("echo {} > /sys/class/gpio/unexport".format(gpio_num))
# 控制gpio输出高电平
def output_high(gpio_num):
os.system("echo 1 > /sys/class/gpio/gpio{}/value".format(gpio_num))
# 控制gpio输出低电平
def output_low(gpio_num):
os.system("echo 0 > /sys/class/gpio/gpio{}/value".format(gpio_num))
# 主函数
def main():
gpio_num = 349
set_gpio_output(gpio_num)
for i in range (10):
output_low(gpio_num)
sleep(2)
output_high(gpio_num)
sleep(2)
release_gpio_output(gpio_num)
if __name__ == '__main__':
main()
EdgeBoard控制串口输出
说明
串口控制详情请参考https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842340/PS+UART#PSUART-ExpectedOutput
EdgeBoard 有预留串口的型号,见下图列表
设备型号 | 预留串口 | 对外硬件接口 |
---|---|---|
EdgeBoard FZ9A/B | /dev/ttyPS1 | TTL |
EdgeBoard FZ3A/B | /dev/ttyPS1 | TTL |
EdgeBoard FZ5C/D | /dev/ttyUL1 | RS232 |
EdgeBoard FZ5C/D | /dev/ttyPS2(使能管脚gpio350) | RS485 |
EdgeBoard FZ9D | /dev/ttyPS3 | RS232 |
EdgeBoard FZ9D | /dev/ttyS2 (使能管脚gpio413) | RS485 |
DEMO
# uartdemo.py
from serial import Serial
try:
uartport = "/dev/ttyPS1"
bps = 9600
timeout = 5
# 打开串口,设置串口的端口、波特率、超时时间
serial = Serial(uartport,bps,timeout=timeout)
# 发送字符串到另一个设备
result = serial.write("HelloWorld")
print(result)
# 关闭串口
serial.close()
except Exception as e:
print("----error-----",e)
EdgeBoard系统卡扩容方法
EdgeBoard出厂自带的系统卡大小为16G,在容量无法满足您的需求时,可使用一张大容量的卡通过以下方式进行扩容。
准备
系统sd卡扩容需要一台Linux操作系统的机器(也可以使用Edgeboard),需要扩容的sd卡(大于16G),读卡器。
操作步骤
扩容前要数据备份,sd卡扩容如果发生误操作有可能会造成卡上内容丢失!
- 将需要作扩大的sd卡,使用读卡器插入linux机器的usb接口
- 确定tf卡挂在位置 默认是 /dev/sda
- 执行如下命令
sudo umount /dev/sda2
parted
(parted) resizepart
Partition number? 2
End? [10.0GB]? 64000
q
e2fsck -f /dev/sda2
resize2fs /dev/sda2
注意:64000为要tf卡容量 = 64G,
4.扩容成功