资讯 社区 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

7-功能扩展

  1. EdgeBoard视频输入和输出

    1.1 视频输入

    1.2 视频输出

  2. EdgeBoard适配wifi上网卡
  3. EdgeBoard适配4G上网卡
  4. EdgeBoard控制GPIO输出
  5. EdgeBoard控制串口输出
  6. 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 准备

  1. 查看内核默认是否支持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 安装驱动(初次使用需安装)

  1. 下载驱动和固件 我们提供了已经编译好的驱动文件,以及依赖的官方固件程序。
  • 先备份系统文件
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输出

说明

GPIO操作详情请参考https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842398/Linux+GPIO+Driver#LinuxGPIODriver-UsingGPIOwithSysFs

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卡扩容如果发生误操作有可能会造成卡上内容丢失!

  1. 将需要作扩大的sd卡,使用读卡器插入linux机器的usb接口
  2. 确定tf卡挂在位置 默认是 /dev/sda
  3. 执行如下命令
	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.扩容成功