Horizon Sunrise X3 PI

来自Waveshare Wiki
跳转至: 导航搜索


Horizon Sunrise® X3 PI
{{{name2}}}
{{{name3}}}
功能简介
特性 小型AI计算机
GPU 伯努利2.0 架构 AI 引擎, 双核BPU,5TOPS算力
CPU 四核 ARM® Cortex®-A53
内存 2G/4G Byte LPDDR4
存储 外置SD卡
接口

简介

地平线旭日®️ X3 派是一款面向生态开发者的嵌入式 AI 开发板,接口兼容树莓派,具有 5 TOPS 端侧推理与 4 核 ARM A53 处理能力。可同时多路 Camera Sensor 的输入并支持 H.264/H.265 编解码。结合地平线的高性能 AI 工具链与机器人开发平台,助力开发者快速落地解决方案。
X3 PI提供两种内存版本供用户选择,分别为2GB和4GB。

产品参数

处理器 地平线旭日® X3M 芯片
CPU 四核 ARM Cortex-A53@1.2GHz
BPU 双核 @1GHz,等效算力 5 TOPS
内存 2G/4G Byte LPDDR4
存储器 外置TF卡
摄像头 MIPI CSI 2lane × 2
显示接口 HDMI × 1 (up to 1920 × 1080);
MIPI-DSI × 1 (up to 1920 × 1080);
USB Host USB Type-A 3.0 × 1;
USB Type-A 2.0 × 2;
USB Device Micro USB 2.0 × 1
有线网络 RJ45 千兆以太网 ×1
无线网络 2.4G Wi-Fi × 1,支持 802.11 b/g/n
蓝牙 Bluetooth 4.1 × 1
其他接口 40PIN × 1;
调试串口 × 1;
供电 USB Type-C,5V-2A
尺寸 85 × 56 × 20 mm
工作温度 -25°C ~ 95 °C(X3M 芯片温度)

系统安装

软件资源

    旭日 X3 派开发板目前支持 Ubuntu 20.04 Server、Desktop 两个系统版本, 镜像下载
    如果您手里的是新版本的X3派,请下载2.0.0版本的镜像,与旧版本镜像不互通。

    balenaEtcher烧录镜像

      注意:使用该软件烧录时,尽量直接接在电脑的USB接口上,不要使用外接拓展,可能会导致烧录不成功。
    1. TF卡插入读卡器,读卡器接入电脑,识别到TF卡后打开balenaEtcher软件
    2. 点击Flash from file,选择你刚解压的镜像文件 system_sdcard.img
        Sdcard-image.png
    3. 点击Select target按钮,选择TF卡对应的磁盘作为目标储存设备
        Step.png
    4. 点击Flash按钮开始烧录,等到工具提示Flash Comple时,表示TF卡镜像制作完成,关闭balenaEtcher,从电脑上取下读卡器,并取出TF卡
        Flash complete.png

    rufus烧写镜像

    1. TF卡插入读卡器,读卡器接入电脑,识别到TF卡后打开rufus软件
    2. 点击选择按钮,在弹出的文件选择对话框中选择解压出来的 system_sdcard.img 镜像文件
        Rufs flash sd.png
    3. 点击开始按钮,软件弹出提示框,点击确定开始烧录TF卡镜像,如果弹出以下信息,点击确定。
        Message.png
    4. 当软件进度条完成并提示准备就绪后,表示TF卡镜像烧录完成,关闭软件,取下读卡器,取出TF卡
        Rufs flash complete.png

    开机操作

      旭日 X3 派断电,将TF卡插入卡槽,并将显示器接入HDMI接口,给开发板上电。
      • 红色指示灯:点亮代表硬件上电正常
      • 绿色指示灯:点亮代表系统启动中,熄灭代表系统启动完成
      系统首次启动时会安装镜像中预置的工具包,整个过程大概需要 1~2 分钟,安装过程中 HDMI 无显示输出,待安装完成后系统会自动重启打开 HDMI 显示输出,并显示开机画面(Server 系统显示地平线 logo、Desktop版本显示系统桌面)。
      开机画面正常显示后,说明系统启动完成,此时可通过串口登录SSH 登录方式登录开发板,登录用户名:sunrise 密码:sunrise
      如果开发板上电后,HDMI 长时间(2 分钟以上)没有显示输出,说明开发板启动异常。此时用户可通过串口登录开发板,查看启动过程中串口的打印,确认开发板启动状态,TF 存储卡镜像异常时 log如下:
      Abnormal.png
      此时用户可重新制作TF储存卡进行系统恢复。

    远程登陆

    使用 VNC、SSH 远程登录时要用到设备 IP,因此用户需要提前获取开发板 IP地址,此时推荐用户使用串口登录开发板并进行网络参数确认,登录用户名:sunrise 密码:sunrise。

    串口登录

      硬件准备

      1. PC
      2. 旭日 X3 派
      3. 充电线
      4. 4PIN排线
      5. 串口模块

      硬件连接


        旭日 X3 派 串口模块
        GND GND
        TXD RXD
        RXD TXD

      再将串口模块连接至电脑。
      注意:电源线不接.

      软件下载

        Serial driver .png

      串口登录操作

      方法一:putty串口登录

        硬件连接好,驱动安装完毕后,打开设备管理器,你会看到以下端口:
        Serial.png
        打开putty软件,按照下图配置(以实际识别到的端口为准)。
        Putty config.png
        旭日 X3 派上电,pytty窗口便会看到有信息打印,然后登陆即可。
        输入命令
        ifconfig

        获取旭日X3派的IP地址

        ifconfig eth0  代表以太网络(指网线),刚烧录的系统默认为192.168.1.10
        ifconfig wlan0 代表WiFi网络

        Ifconfig.png

      方法二:MobaXterm串口登录

        硬件连接好后,给旭日 X3 派上电,打开MobaXterm软件,按照下图配置。
        MobaXterm config.png
        旭日 X3 派上电,MobaXterm便会看到有信息打印,然后登陆即可。

SSH登录

    SSH登陆前我们需要配置电脑IP
    从串口登录我们已经获取到了 sunrise x3 pi 的 IP 地址 (192.168.1.10)
    为了使电脑与 sunrise x3 pi 进行通信需要进行以下操作:
  1. 开发板、PC 机 IP 地址前三段相同,例如开发板:192.168.1.10 PC 机:192.168.1.100
  2. 开发板、PC 机的子网掩码、网关保持一致
  3. PC 机网络防火墙处于关闭状态
    配置电脑 IP 主要进行如下几步:
  1. 在网络连接中找到对应的以太网设备并右击选择属性
    1. Network connection.png
  2. 找到 Internet 协议版本 4 选项并双击打开
  3. 在下图红框位置填入对应的网络参数,然后点击确定
      IPv4.png
  4. MobaXterm登录

      MobaXterm configuration SSH.png

    注意:开机输入用户名和密码必须在60S内完成,没完成的重新在60S内再输入一次即可。

VNC 登录

打开VNC软件,在地址栏输入旭日 X3 派的IP地址,回车,按照以下图片配置即可

    VNC 1.png

    VNC 2.png

命令行登录

ubuntu虚拟机打开终端输入:

ssh sunrise@192.168.1.10

Ubuntu terminal.png

系统配置

    系统更新

    出于系统安全、稳定性的考虑,推荐用户安装完系统后,通过 APT 命令对系统进行更新。
    在/etc/apt/source.list 文件中,保存了 APT 命令的软件源列表,在安装软件前,需要先通过apt 命令更新 package 列表。
    首先打开终端命令行,并输入如下命令:

    sudo apt update

    其次,升级所有已安装的软件包到最新版本,命令如下:

    sudo apt full-upgrade

    注意:推荐使用 full-upgrade 而不是简单的 upgrade 命令,这样当相关依赖发生变动时,也会同步更新依赖包。
    当运行 sudo apt full-upgrade 命令时,系统会提示数据下载和磁盘占用大小,但是 apt 不会检查磁盘空间是否充足,推荐用户通过

     df -h

    命令手动检查。此外,升级过程中下载的 deb 文件会保存在/var/cache/apt/archives 目录中,用户可以通过

    sudo apt clean 

    命令删除缓存文件以释放磁盘空间。
    执行 full-upgrade 之后,可能会重新安装驱动和升级旭日 X3 派的内核,所以建议都重启一下设备,命令如下:

    sudo reboot

    网线网络配置

    开发板网络配置保存在/etc/network/interfaces 文件中 在使用 vim 编辑器时保存时请先按下Esc键,再输入

     :wq!

    推荐使用 nano 编辑器,安装命令如下:

    sudo apt update
    sudo apt-get install nano

      静态 IP 修改

      通过修改 address、netmask、gateway 等字段,可完成对静态 IP 配置的修改
      例如:

      sudo vim /etc/network/interfaces
      # interfaces(5) file used by ifup(8) and ifdown(8)
      # Include files from/etc/network/interfaces.d:
      source-directory /etc/network/interfaces.d
      auto eth0
      iface eth0 inet static
          address 192.168.1.10
          netmask 255.255.255.0
          gateway 192.168.1.1
          metric 700

      修改完成后,命令行输入

      sudo systemctl restart NetworkManager

      让配置生效。
      重启更新网络频段:

      sudo reboot

      修改 DHCP 配置

      DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)通常被应用在大型的局域网络环境中,主要作用是集中的管理、分配 IP 地址,使网络环境中的主机动态的获得 IP 地址、Gateway 地址、DNS 服务器地址等信息,并能够提升地址的使用率。开发板的 DHCP 网络配置保存在/etc/network/interfaces 文件,通过修改 eth0 相关配置,可完成对 DHCP 模式的修改,例如终端输入:

      sudo vim /etc/network/interfaces

      修改以下内容:

      source-directory /etc/network/interfaces.d
      auto lo
      iface lo inet loopback
      auto eth0
      iface eth0 inet dhcp
          metric 700
      修改完成后,命令行输入
      sudo systemctl restart NetworkManager

      命令让配置生效。
      重启更新网络频段:

      sudo reboot

      修改 MAC 地址配置

      如需修改开发板默认 MAC 地址,可通过在/etc/network/interfaces 文件中增加 pre-up 配置信息,指定用户需要的 MAC 地址,例如:

      sudo vim /etc/network/interfaces

      修改以下内容:

      # interfaces(5) file used by ifup(8) and ifdown(8)# Include files from
      /etc/network/interfaces.d:
      source-directory /etc/network/interfaces.d
      auto eth0
      iface eth0 inet static
          address 192.168.1.10
          netmask 255.255.255.0
          gateway 192.168.1.1
          pre-up ifconfig eth0 hw ether 00:11:22:9f:51:27

      修改完成后,命令行输入

      sudo systemctl restart NetworkManager

      使配置生效。
      重启更新网络频段

      sudo reboot

    无线网络配置

      Ubuntu Desktop 版本系统

      连接上 WiFi 后如下图标注位置会变成 WiFi 样式
      Wireless configuration.png

      Ubuntu Server 版本系统

      输入 WiFi 扫描命令:

      sudo nmcli device wifi rescan

      如果出现 Error: Scanning not allowed immediately following previous scan.的提示,表示扫描太频繁,请等一会后再扫描
      显示扫描到的 WiFi:

      sudo nmcli device wifi list

      使用命令连接 WiFi:

      sudo wifi_connect "SSID" "PASSWD"
      sudo wifi_connect "JSBPI" "waveshare0755" 

      返回以下命令表示成功,出现其他问题按照错误提示进行修改即可
      Device 'wlan0' successfully activated with '********-****-****-****-************'
      如果提示 Error: No network with SSID 'WiFi-Test' found.,说明是热点还没有刷新出来,可以执行

      sudo nmcli device wifi rescan

      命令重新扫描即可。

      无线网络软AP

        无线网络软 AP 可以理解为手机上的 WiFi 热点。
        AP6212 的 wifi 支持软 AP 和 Station 两种模式,默认运行在 Station 模式下,如果要使用软 AP 功能请按照以下步骤进行配置。
      1. 安装 hostapd 和 isc-dhcp-server
        sudo apt update
        sudo apt install hostapd
        sudo apt install isc-dhcp-server

        配置 hostapd,打开

        sudo vim /etc/hostapd.conf

        无密码的热点配置请添加以下内容:

        interface=wlan0
        driver=nl80211
        ctrl_interface=/var/run/hostapd
        ssid=Sunrise
        channel=6
        ieee80211n=1
        hw_mode=g
        ignore_broadcast_ssid=0

        有密码的热点配置请添加以下内容

        interface=wlan0
        driver=nl80211
        ctrl_interface=/var/run/hostapd
        ssid=Sunrise
        channel=6
        ieee80211n=1
        hw_mode=gignore_broadcast_ssid=0
        wpa=2
        wpa_key_mgmt=WPA-PSK
        rsn_pairwise=CCMP
        wpa_passphrase=12345678
        
      2. 配置 isc-dhcp-server 终端输入
        sudo vim /etc/default/isc-dhcp-server

        如下定义使用的网络接口,保存并退出:INTERFACESv4="wlan0"
        INTERFACESv4.png
        终端输入:

        sudo vim /etc/dhcp/dhcpd.conf

        取消以下字段的注释:
        authoritative;
        Uncomment from the comment.png
        然后输入:

        sudo vim /etc/dhcp/dhcpd.conf 

        在文件的末尾增加以下配置:

        subnet 10.5.5.0 netmask 255.255.255.0 {
          range 10.5.5.100 10.5.5.254;
          option subnet-mask 255.255.255.0;
          option routers 10.5.5.1;
          option broadcast-address 10.5.5.31;
          default-lease-time 600;
          max-lease-time 7200;}
      3. 停止 wpa_supplicant 服务,并重启 wlan0
        注意:从这一步开始最好进入超级用户的模式
        第一次进入超级用户,请按照下面进行操作
        设置进入 root 用户的密码:
        sudo passwd root

        然后输入 3 次密码,设置密码、确认密码、第二次确认
        进入 root 用户:

        su root / sudo su

        然后输入密码
        退出 root 用户:

        su sunrise

        输入下面的命令停止 wpa_supplicant 服务,并重启 wlan0

        systemctl stop wpa_supplicant
      4. 启动 hostapd 服务
        sudo hostapd -B /etc/hostapd.conf

        会打印以下信息:

        root@ubuntu:~# sudo hostapd -B /etc/hostapd.conf
        Configuration file: /etc/hostapd.conf
        Using interface wlan0 with hwaddr 08:e9:f6:af:18:26 and ssid "sunrise"
        wlan0: interface state UNINITIALIZED->ENABLED
        wlan0: AP-ENABLED
      5. 配置无线接口 wlan0 的 IP 和网段 注意要跟上面的配置一致。
        sudo ifconfig wlan0 10.5.5.1 netmask 255.255.255.0
      6. 开启 dhcp 服务器,连上热点会从 10.5.5.100 到 10.5.5.255 之间分配一个 ip 地址给客户端。
        sudo systemctl start isc-dhcp-server
        sudo systemctl enable isc-dhcp-server
        打开手机连接 Sunrise 这个热点名
      7. Sunrise wifi.png
      8. 切换回 Station 模式
        # 停止 hostapd
        killall5 -9 hostapd
        # 清除 wlan0 的地址
        ip addr flush dev wlan0
        sleep 0.5
        ifconfig wlan0 down
        sleep 1
        ifconfig wlan0 up
        # 重启 wpa_supplicant
        systemctl restart wpa_supplicant
        # 连接热点, 具体操作可以查看上一章节 “无线网络”
        wifi_connect "JSBPI" "waveshare0755"

    DNS 服务

      DNS(Domain Name Server)是进行域名(domain name)和与之相对应的 IP 地址转换的服务器。开发板 DNS 配置过/etc/systemd/resolved.conf 文件管理,用户可通过修改该文件完成 DNS 相关配置, 在其中取消 #DNS 前面的 # 号
      1. 修改/etc/systemd/resolved.conf 文件:
        sudo vim /etc/systemd/resolved.conf

        添加 DNS 服务器地址:

        DNS=8.8.8.8 114.114.114.114
      2. 使能新的 DNS 配置:
        sudo systemctl restart systemd-resolved
        sudo systemctl enable systemd-resolved
        sudo mv /etc/resolv.conf /etc/resolv.conf.bak
        sudo ln -s /run/systemd/resolve/resolv.conf /etc/

    CPU 调频策略

      开发板在 Linux 内核中采用 CPUFreq 驱动对 CPU 工作状态进行管理,默认状态为 ondemand 模式,此时 CPU 会根据负载动态调节频率,以达到降功耗目的,用户可通过如下命令将 CPU 强制工作在 1.2GHz 最高频率下:
      sudo bash -c 'echo performance > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor' 

      开发板在系统中提供了超频功能,可将CPU最高频率从1.2GHz提升到1.5GHz,配置命令如下:

      sudo bash -c 'echo 1 > /sys/devices/system/cpu/cpufreq/boost'

      注意,CPU 超频可能会造成系统稳定性问题,如遇稳定性问题,需要关闭超频功能,命令如下:

      sudo bash -c 'echo 0 > /sys/devices/system/cpu/cpufreq/boost'

      特别声明: CPU 超频仅限于开发者 Geek 尝试使用,在做超频处理前,需要保证给芯片做好扇热措施,保证 CPU 长时间运行下,芯片结温能够保持在 95 摄氏度以下,避免因芯片在高温情况下长时间运行导致芯片故障。CPU 超频同时会导致一些目前还无法预知的芯片可靠性问题,请开发者谨慎操作。查看芯片当前的结温温度、CPU 运行频率、BPU 运行频率和 BPU 使用率的命令如下:

      sudo hrut_somstat

自启动配置

通过在 sudo vim /etc/rc.local 文件末尾添加命令,可实现开机自启动运行命令的功能。
Self-starting.png

蓝牙

    调用脚本完成初始化
    sudo startbt6212.sh

    脚本调用初始化完成了以下工作:

    • 复位蓝牙
    • 创建 messagebus 用户和用户组,dbus-daemon 程序运行时需要使用该用户
    • 运行 brcm_patchram_plus 完成蓝牙的驱动加载和固件加载
    • 循环检查 /sys/class/bluetooth/hci0 目录是否存在,确认蓝牙驱动已经正常运行
    • 出现 Done setting line discpline 表示蓝牙启用成功
    • 执行 hciconfig hci0 up 完成蓝牙的 Link Up
    • 执行 hciconfig hci0 piscan 进行蓝牙扫描,本步骤可以根据情况去掉
    • 如下图:

    Initialization.png

    • 执行成功后,确认以下进程是否正常运行:
    cd /usr/bin
    *ls #查看是否有dbus-daemon和brcm_patchram_plus文件
    *cd ..#返回上一级
    *cd lib/bluetooth #进入目录
    *ls #查看是否有bluetooth文件

    命令行操作

    进入交互模式下的蓝牙配置界面

    sudo bluetoothctl

    Bluetoothctl.png
    表示蓝牙已被识别
    输入show查看蓝牙详细信息
    Show.png
    注意蓝牙的Powered(上电)、Discovera(可被搜索到)的状态

    power on      使能蓝牙
    power off     关闭蓝牙
    discoverable on 使设备可以被检测到
    discoverable off 使设备无法被检测到
    scan on 开始扫描附近的蓝牙设备
    scan off 关闭扫描

    配对对应的蓝牙设备,注意根据提示输入 yes

    pair [targetMAC] 
    比如:pair 9C:5A:81:3E:97:4C

    配对成功后,使用指令下次自动连接

    trust [targetMAC]
    比如:trust 9C:5A:81:3E:97:4C

    Connect.png

    Bluetoothctl 命令扩展

    • exit :退出 bluetoothctl 交互界面
    • help :获取 bluetoothctl 支持的命令表
    • Connect :连接 BLE 设备,输入 connect BLE MAC 连接指定 BLE 设备,连接成功会提示 connect successfully, 第一次连接成功后,会把该 BLE 设备支持的属性都显示出来;无法搜索到指定设备,会提示 not available
    • disconnect :断开设备连接

    更多操作请访问 BlueZ 官网 :

    http://www.bluez.org/
    https://blog.csdn.net/zhuo_lee_new/article/details/106626680

    桌面软件操作

    选择右上角的图标或菜单栏对蓝牙进行操作
    Bluetooth-software1.png
    或者点击Application。
    Bluetooth-software2.png
    Bluetooth Adapters :用来配置本机蓝牙设置
    Bluetooth-software3.png
    tooth Manager :用来扫描蓝牙设备并连接
    Bluetooth-software4.png

    拓展

    查看是否识别蓝牙模块:
    hciconfig -a
    查看蓝牙模块的地址:
    hcitool dev
    激活蓝牙:
    sudo hciconfig hci0 up
    此次测试设置蓝牙模块为服务端且不需要配对码:
    hciconfig hci0 noauth

    编辑文件,开启蓝牙设备:

    sudo vi /etc/systemd/system/dbus-org.bluez.service

    找到ExecStart=/usr/lib/bluetooth/bluetoothd,更改并添加为:

    ExecStart=/usr/lib/bluetooth/bluetoothd -C
    ExecStartPost=/usr/bin/sdptool add SP

CSI摄像头使用

硬件连接

要测试摄像头,需要给X3派接入HDMI屏幕

将排线的金属面朝下,接入摄像头接口。

测试摄像头

X3派的摄像头接口默认是开启的,上电即可用。系统自带的AI demo可以用来测试摄像头,请确保已经连接HDMI屏幕,可以显示预览画面。
树莓派或者Jetson系列的摄像头,接入X3 PI需要另外购买转接板
打开终端,输入以下指令:

  • 如果你是通过SSH登录的,需要现指定输出为屏幕
export DISPLAY=:0
  • 使用AI例程测试
cd /app/ai_inference/03_mipi_camera_sample
sudo python3 mipi_camera.py 

摄像头正常情况下会开启预览,并显示图像和对应的物体识别结果。

GPIO的基本使用

开启 40Pin 引脚上的外设(SPI2、I2C0、I2S0、I2S1、UART3)
输入

 sudo srpi-config

Disabled 表示关闭这个功能(配置成普通 GPIO)
okay 表示开启这个功能(使用专用功能)
Spi config.png
板载绿色 LED 灯的引脚为 GPIO26

使用 shell 命令控制GPIO(文件IO)

    该目录下各个目录和文件的功能

    cd sys/class/gpio
    • gpio_operation 通过/sys/文件接口操作 IO 端口 GPIO 到文件系统的映射
    • 控制 GPIO 的目录位于/sys/class/gpio
    • /sys/class/gpio/export 文件用于通知系统需要导出控制的 GPIO 引脚编号
    • /sys/class/gpio/unexport 用于通知系统取消导出
    • /sys/class/gpio/gpiochipX 目录保存系统中 GPIO 寄存器的信息,包括每个寄存器控制引脚的起始 编号 base,寄存器名称,引脚总数
    • 导出一个引脚的操作步骤:向/sys/class/gpio/export 写入此编号,比如 12 号引脚,echo 12 > /sys/class/gpio/export,命令成功后生成/sys/class/gpio/gpio12 目录,如果没有出现相应的目录,说明此引脚不可导出
    • direction 文件,定义输入输入方向,可以通过下面命令定义为输出,direction 接受的参数:in, out, high, low。high/low 同时设置方向为输出
    • value 文件是端口的数值,为 1 或 0

    实际操作

    1. 使 GPIO105(BCM26 脚)从内核空间导出到用户空间中
      sudo echo 105 > /sys/class/gpio/export
    2. 查看 GPIO18 引脚
      cd /sys/class/gpio/gpio105
    3. 设置 GPIO18 的模式
      sudo echo out > direction #设置为输出模式
      sudo echo in > direction #设置为输入模式
    4. 设置引脚状态
      sudo echo 1 > value 设置为高电平
      sudo echo 0 > value #设置为低电平
    5. 读取引脚状态
      sudo cat value #返回值为 0 表示为低状态,1 为高状态
    6. 读取引脚模式
      sudo cat direction # 返回值为 in 表示为输入,out 为输出
    7. 取消导出
      cd
      sudo echo 105 > /sys/class/gpio/unexport

    Python示例

      旭日 X3 派默认已经安装了 Python 和 Hobot.GPIO,可以通过导入模块,并且查看其版本信息。
      禁用警告信息

      您尝试使用的 GPIO 可能已在当前应用程序外部使用。在这种情况下,GPIO 库将向您发出警告。如果您在设置模式和频道之前尝试清理,它也会警告您。要禁用警告,请调用:

      GPIO.setwarnings(False)
      设置引脚编号方式
      GPIO.setmode(GPIO.BOARD)

      BOARD(the pin number of the 40 pin GPIO header):物理引脚序号,在硬件上丝印上可以直接看到的序号,物理上正好一一对应。
      BCM(the Broadcom SoC GPIO numbers):BCM 是根据博通 SoC 的 GPIO 规则命名的。
      CVM 使用字符串代替数字,对应于 CVM / CVB 连接器的信号名称。
      SOC 对应的编号是旭日 X3M 芯片的 GPIO 管脚序号,与芯片数据手册一一对应.

      设置管脚

      GPIO 通道必须在用作输入或输出之前进行设置。要将通道配置为输入,请调用:

      # (其中通道基于上面讨论的引脚编号模式)
      GPIO.setup(channel, GPIO.IN)

      设置输出:

      GPIO.setup(channel, GPIO.OUT)

      也可以为输出通道指定一个初始值:

      GPIO.setup(channel, GPIO.OUT, initial=GPIO.HIGH)

      将通道设置为输出时,也可以同时设置多个通道:

      # 根据需要添加尽可能多的通道。您还可以使用元组: (18,12,13)
      channels = [18, 12, 13]
      GPIO.setup(channels, GPIO)
      配置输出引脚状态
      GPIO.output(channel, state)

      其中 state 可以是 GPIO.LOW 或 GPIO.HIGH。

      获取输入引脚的状态
      GPIO.input(channel)

      将返回 0 或者 1。 0 代表 GPIO.LOW, 1 代表 GPIO.HIGH。

      清理管脚占用

      释放所有的引脚

      GPIO.cleanup()

      只清理特定通道

      # 清除单个通道
      GPIO.cleanup(channel)
      # 清除一组通道
      GPIO.cleanup( (channel1, channel2) )
      GPIO.cleanup( [channel1, channel2] )
      查看引脚状态
      GPIO.gpio_function(channel)
      该函数返回 IN 或 OUT。 
      边沿检测与中断
        边缘检测函数

        此函数阻塞调用线程,直到检测到提供的边缘。

        GPIO.wait_for_edge(channel, GPIO.RISING)

        此函数调用之后,直接掠过,需要搭配其他函数使用

        GPIO.add_event_detect(channel, GPIO.RISING)
        GPIO.RISING :上升沿
        GPIO.FALLING :下降沿
        GPIO.BOTH :边沿(上升 + 下降)
        设置等待超时时间
        # 超时以毫秒为单位
        GPIO.wait_for_edge(channel, GPIO.RISING, timeout=500)

        该函数返回检测到边缘的通道,如果发生超时,则返回 None。

        event_detected() 函数

        此函数可用于定期检查自上次调用以来是否发生了事件。

        GPIO.add_event_detect(channel, GPIO.RISING)
        if GPIO.event_detected(channel):
        print("Rising edge event detected")
        检测到边沿函数时调用回调函数

        此功能可用于为回调函数运行第二个线程。因此,回调函数可以与您的主程序 并发运行以响应边沿事件。

        # 定义回调函数
        def callback_fn(channel):
        print("Callback called from channel %s" % channel)
        # 添加上升沿检测
        GPIO.add_event_detect(channel, GPIO.RISING, callback=callback_fn)

        如果需要,也可以添加多个回调,注意两个回调函数时按顺序运行的

        def callback_one(channel):
        print("First Callback")
        def callback_two(channel):
        print("Second Callback")
        GPIO.add_event_detect(channel, GPIO.RISING)
        GPIO.add_event_callback(channel, callback_one)
        GPIO.add_event_callback(channel, callback_two)
        为了防止误操作的去抖时间
        # 以毫秒为单位设置的去抖时间
        GPIO.add_event_detect(channel, GPIO.RISING, callback=callback_fn, bouncetime=200)
        关闭中断

        如果不再需要边沿检测,可以将其删除

        GPIO.remove_event_detect(channel)

PWM

Sunrise x3 pi 的 40 Pin 有两个 PWM 输出脚:
PWM0 :33(BOARD),13(BCM),4(x3 管脚号)
PWM1 :32(BOARD),12(BCM),25(x3 管脚号)

shell命令控制

    PWM0

    导出 PWM0 到用户空间

    echo 0 > /sys/class/pwm/pwmchip0/export

    设置 PWM 一个周期的时间(ns)
    注意 :PWM 波的这个时间的范围建议 50 ~ 21000

    echo 20000 > /sys/class/pwm/pwmchip0/pwm0/period

    占空比设置,这里设置的是 PWM 开启状态的时间(默认为高电平)

    echo 10000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
    # pwm 信号中以低电平为开启状态,还是以高电平为开启状态,这里设置为普通极性,也就
    是高电平为开启状态
    # echo 'normal' > /sys/class/pwm/pwmchip0/pwm0/polarity

    使能 PWM 波输出

    echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable

    失能 PWM 波输出

    echo 0 > /sys/class/pwm/pwmchip0/pwm0/enable

    取消导出

    echo 0 > /sys/class/pwm/pwmchip0/unexpor

    PWM4

    与PWM0类似

    pwmchip3 + PWM1 = PWM4
    echo 1 > /sys/class/pwm/pwmchip3/export
    echo 20000 > /sys/class/pwm/pwmchip3/pwm1/period
    echo 10000 > /sys/class/pwm/pwmchip3/pwm1/duty_cycle
    echo 1 > /sys/class/pwm/pwmchip3/pwm1/enable
    echo 0 > /sys/class/pwm/pwmchip3/pwm1/enable
    echo 1 > /sys/class/pwm/pwmchip3/unexport
    

    扩展

    pwmchip0/3 目录下属性

    device
    export:导出 pwm 通道,使用前必须导出
    npwm:PWM 控制器下共有几路 PWM 输出
    power
    subsystem
    uevent
    unexport:取消导出 PWM 通道

    pwm* 目录下属性

    周期 period
    占空比 duty_cycle
    极性 polarity
    周期:单位为纳秒,1000000000 ns = 1s
    占空比:高低电平的占比
    极性:以低电平为开启状态,还是以高电平为开启状态,一般为 normal,也就是高电平为开启状态
    (inversed、normal)
    

    python示例

    Hobot.GPIO 库仅在带有附加硬件 PWM 控制器的引脚上支持 PWM,与 RPi.GPIO 库不同,Hobot.GPIO 库不实现软件模拟 PWM,旭日X3派支持 2 个 PWM 通道。
    导入Hotbot.GPIO

    sunrise@ubuntu:~$ sudo python3
    Python 3.8.10 (default, Mar 15 2022, 12:22:08) 
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import Hobot.GPIO as GPIO
    >>> GPIO.VERSION
    '0.0.2'
    >>> GPIO.model
    'X3PI'

    配置:

    配置引脚编号方式 :
    GPIO.setmode(GPIO.BOARD)
    配置输出引脚和输出 PWM 的频率(48KHz ~ 192MHz)
    p = GPIO.PWM(output_pin, 48000)
    配置初始占空比(0 - 100)
    p.start(val)
    动态调节占空比(0 - 100)
    p.ChangeDutyCycle(val)
    停止输出 PWM 波
    p.stop()
    清理管脚占用
    GPIO.cleanup()
    
    实例展示

    运行指令:

    sudo python3 test_PWM.py

    Test PWM.png
    测试说明: 打开 output_pin 指定的PWM通道,初始占空比 25%, 先每0.25秒增加5%占空比,达到100%之后再每0.25秒减少5%占空比,在正常输出波形时,可以通过示波器或者逻辑分析仪测量输出信号,观察波形。

串口

旭日X3派在40PIN上默认使能 UART3,物理管脚号 8 和 10,IO电压 3.3V。
注意:在 40Pin 接口上存在的只有串口 3(/dev/ttyS3);串口 1(/dev/ttyS0)是系统调试口,在未明白它的作用前,不建议对它进行测试。

Shell 命令控制

    基本指令

    查看串口属性 :

    sudo stty -F /dev/ttyS3

    查看全部参数

    sudo stty -F /dev/ttyS3 -a

    设置串口波特率(默认为 9600) :

    sudo stty -F /dev/ttyS3 speed 115200

    115200 波特率 8 数据位 1 停止位 无校验位

    sudo stty -F /dev/ttyS3 speed 115200 cs8 -parenb -cstopb

    串口发送数据 :

    sudo echo "afafsadf" > /dev/ttyS3

    串口接收数据(会将接收到的数据添加两个字符后发送回去):

    sudo cat /dev/ttyS3

    扩展: 读取数据并保存到 txt 文本文件中:

    sudo cat /dev/ttyS3 > ttyS3_output.txt

    发送数据,后开始接收数据

    sudo echo "asdasdasdas" > /dev/ttyS3 | cat /dev/ttyS3

    去除串口回显:

    stty -F /dev/ttyS3 -ech0

    执行该条命令后,串口只有检测到换行后才会打印出来 读取串口数据时指定读取行数。比如指定前 5 列数据。

    cat /dev/ttyS3 |head -n 5
    Python示例程序

    回环测试:
    把TXD和RXD在硬件上进行连接,也就是连接8和10引脚,然后运行测试程序,进行写和读操作,预期结果是读出的数据要完全等于写入的数据。
    运行示例程序:

    sudo python3 test_serial.py
    Test serial.png

SPI

旭日X3派在40Pin上物理管脚 19, 21, 23, 24引出了旭日X3芯片的 SPI2 总线,支持一个片选,IO电压3.3V。

Python

    下载库:
    sudo apt-get update
    sudo apt-get install python-pip
    pip install spidev
    #导入spidev模块
    import spidev
    #创建spidev类的对象以访问基于spidev的Python函数
    spi=spidev.SpiDev()
    #打开spi总线句柄
    spi.open(int(spi_bus), int(spi_device))
     #int(spi_bus) :设置spi的bus号(0, 1, 2)
     #int(spi_device) :设置片选(0, 1)
    #设置spi频率为12MHz
    spi.max_speed_hz = 12000000
    
    # 发送几个数据读回来也是几个数据
    resp = spi.xfer2([0x55, 0xAA])
    
    # 释放对应的 SPI
    spi.close()
    
    spi.readbytes(n) #从 spi 设备读取 n 个字节
    spi.writebytes(list of values) #将数据列表写入 spi 设备
    spi.writebytes2(list of values) #接受大型列表,支持 numpy 字节数组
    spi.xfer(send_list) #传输数据
    spi.xfer2(send_list) #传输数据,列表数据不能超过 4096 bytes
    spi.xfer3(send_list) #接受大型列表,支持 numpy 字节数组
    配置
    max_speed_hz      #通信时钟最大频率
    mode              #spi mode 0b00~0b11
    no_cs             #设置 SPI_NO_CS 标志是否使用 CS
    threewire         #共享 SI/SO 信号
    lsbfirst          #猜测 低位优先
    loop
    cshigh            #猜测 CS 为高有效
    bits_per_word

I2C

检测I2C设备

    sudo i2cdetect -y -r 1
    sudo i2cdetect -y -r 0
    

    该指令会启动I2C检测电路,电路上实际连接的设备会显示,没有链接在电路上的设备是不会显示的,检测到的是7位I2C地址。

    sudo ls /dev/i2c-*

    列出所有已开启的I2C。旭日 X3 派只有两个I2C硬件

    /dev/i2c-0  /dev/i2c-1  

I2C的波特率

    查看I2C的传输速率
    sudo cat /sys/module/i2c_bcm2708/parameters/baudrate

    修改波特率

    sudo nano /boot/config.txt
    添加一行dtparam=i2c1_baudrate=50000(假设我们将其设置为50khz).
    sudo reboot
    获取当前波特率:
    sudo cat /sys/module/i2c_bcm2708/parameters/baudrate 

    设置波特率:

    sudo emacs /etc/modprobe.d/custom.conf 
    添加一行设置:
    options i2c_bcm2708 baudrate=100000
    设置后需要重启才能生效。

    树莓派库

     import smbus    
    用来确认使用何种总线:使用IIC总线1
    self.i2c = smbus.SMBus(1)     

Python示例

    pip install smbus2
    https://pypi.org/project/smbus2/
    调用 :import smbus
    
    调用树莓派的 IIC1 	
    self.i2c = smbus.SMBus(1)
    
    设置树莓派的地址
    self.address = address
    
    从设备读取单个字节。
    read_byte(i2c_addr,force=None) 
    
    从指定寄存器读取单个字节。
    read_byte_data(i2c_addr,register,force=None) 
    
    从指定寄存器中读取最多 32 字节的块。
    read_block_data(i2c_addr,register,force=None) 
    
    从指定寄存器读取字节数据块
    read_i2c_block_data(i2c_addr,register,length,force=None)
    
    从指定寄存器中读取单个字(2 个字节)
    read_word_data(i2c_addr,register,force=None)
    
    将单个字节写入设备。
    write_byte(i2c_addr,value,force=None)
    
    将一个字节写入指定的寄存器。
    write_byte_data(i2c_addr,register,value,force=None)
    
    将字节数据块写入指定寄存器。
    write_block_data(i2c_addr,register,data,force=None)
    发送的数据格式如下:
    地址,寄存器编号,数据数量,数据
    
    将字节数据块写入指定寄存器。
    write_i2c_block_data(i2c_addr,register,data,force=None)
    
    将一个字节写入指定的寄存器。
    write_word_data(i2c_addr,register,value,force=None)
    
    执行快速事务。如果不成功,抛出 IOError。
    write_quick(i2c_addr,force=None) 
    
    取消IIC的使用/占用
    close()
    

    使用 SMBus 库访问 I2C 设备
    在旭日X3PI上可以使用 SMBus 库在 Python 脚本中访问 I2C 总线。SMBus 是 I2C 接口的子集。SMBus 的 Python 库可用于与基于 I2C 的设备进行通信。
    运行以下命令可以在旭日X3PI上安装 SMBus 库:

    sudo apt-get install python-smbus

    在 Python 脚本中,可以使用以下语句导入 SMBus 库:

    import smbus

    导入 SMBus 库后,必须使用 SMBus() 方法创建 SMBus 类的对象。SMBus() 方法将 I2C 端口号作为参数,必须在赋值语句中使用才能创建 SMBus 对象。它具有以下语法:

    <Object_name> = smbus.SMBus(I2C_Port_Number)

    以下是创建 SMBus 对象的有效示例:

    i2c-bus = smbus.SMBus(1)

    请注意:要使用最新的 SMBus2 库,可以通过运行以下命令使用 pip 安装它:

    pip install smbus2

    在 Python 脚本中,可以使用以下语句导入 SMBus2 库:

    from smbus2 import SMBus, i2c_msg

    可以使用 smbus2.SMBus() 方法创建 SMBus 类的对象,如下所示:

    i2c-bus = smbus2.SMBus(1)

    smBus2 库有两个类——SMBus 和 i2c_msg。SMBus 类支持以下方法:

    smbus.SMBus()/smbus2.SMBus() – 在 Python 脚本中创建 SMBus 对象。
    open(bus) – 打开给定的 i2c 总线。
    close() – 关闭 I2C 连接。

    来自 I2C 从机的串行数据可以字节、字或字节块读取。在某些 I2C 从设备中,主设备需要从特定寄存器访问串行数据。SMBus2 库中提供了以下用于从从设备读取串行 I2C 数据的方法:

    read_byte(i2c_addr,force=None) – 从设备读取单个字节。
    read_byte_data(i2c_addr,register,force=None) – 从指定寄存器读取单个字节。
    read_block_data(i2c_addr,register,force=None) – 从给定寄存器中读取最多 32 字节的块。
    read_i2c_block_data(i2c_addr,register,length,force=None) – 从给定寄存器读取字节数据块。
    read_word_data(i2c_addr,register,force=None)– 从给定寄存器中读取单个字(2 个字节)。

    类似地,数据可以字节、字或字节块写入 I2C 从机。在某些 I2C 从设备中,数据必须写入特定的寄存器。SMBus2 库中提供了以下用于从从设备写入串行 I2C 数据的方法:

    write_byte(i2c_addr,value,force=None) – 将单个字节写入设备。
    write_byte_data(i2c_addr,register,value,force=None) – 将一个字节写入给定的寄存器。
    write_block_data(i2c_addr,register,data,force=None) – 将字节数据块写入给定寄存器。
    write_i2c_block_data(i2c_addr,register,data,force=None) – 将字节数据块写入给定寄存器。
    write_word_data(i2c_addr,register,value,force=None)– 将一个字节写入给定的寄存器。
    write_quick(i2c_addr,force=None) – 执行快速事务。如果不成功,抛出 IOError。

    以下方法可用于管理 SMBus 进程和组合 I2C 总线读/写操作:

    process_call(i2c_addr,register,value,force=None) – 执行 SMBus 进程调用,发送 16 位值并接收 16- bit response
    block_process_call(i2c_addr,register,data,force=None) – 发送一个可变大小的数据块并接收另一个可变大小的响应。
    i2c_rdwr(*i2c_msgs) – 在单个事务中组合一系列 i2c 读写操作。

USB使用

    USB接口说明

    Sunrise x3 Pi 提供一路 USB 接口,通过 USB HUB、硬件开关电路,扩展了一路 USB3.0 Type A(接口 6),2 路 USB3.0 Type A(接口 5),一路 Micro USB 2.0(接口 4)。

      接口类型 接口序号 接口数量 接口描述
      Micro USB2.0 接口4 1路 USB Device 模式,用于连接主机实现 ADB、Fastboot、UVC 等功能
      USB 2.0 Type A 接口5 2路 USB Host 模式,用于接入 USB 2.0 外设
      USB 3.0 Type A 接口6 1路 USB Host 模式,用于接入 USB 3.0 外设

    开发板通过硬件电路实现 USB 主从模式自动切换,用户无需关心 USB 主从模式,只需按照上表的逻辑连接设备即可。
    需要注意的是,开发板禁止同时使用 USB Host、Device 接口,否则会造成功能异常。

    U盘挂载

    U 盘挂载目录为 /media
    sda1 :第一个 U 盘挂载路径
    sdb1 :第二个 U 盘挂载路径
    sdcard1 :sunrise x3 pi 本身系统盘路径
    USB flash disk mount.png

    USB串口转接板

    开发板 USB 2.0/3.0 Type A 接口支持 USB 串口转接板功能,可自动检测 USB串口转接板接入并创建设备节点/dev/ttyUSB* 或者 /dev/ttyACM*(星号代表 0 开始的数字)。用户可参考使用串口章节对串口进行使用
    Usb device.png

    USB摄像头

    终端输入,查看插入前与插入后的变化,检测摄像头是否被识别到

    ls /dev/video*

    终端输入,查询摄像头是否工作正常

    sudo v4l2-ctl -d /dev/video8 --all
    

    Ubuntu Server 镜像操作

    先进行桌面VNC 安装
    通过如下命令安装 xfce4 桌面:

    sudo apt update
    sudo apt install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils

    通过以下命令安装 VNC 服务端

    sudo apt install tightvncserver

    安装完成后,使用如下命令查看 vnc 服务是否已经启动:

    ps -ef | grep vnc

    正常启动的话,可以看到监听了 5900 端口

    通用操作

    登陆 VNC 主机,安装 ffmpeg

    sudo apt install ffmpeg

    连接 USB 摄像头前后,使用以下命令查看当前的 video 设备,确定摄像头的设备号:

    ls /dev/video*

    输入指令启动摄像

    sudo ffplay /dev/video8 

资料

官方资料

适用的外围模块

USB扩展模块

SIM/GPS模块

显示屏

摄像头模块

USB接口

CSI接口

500 万像素 OV5647 模组摄像头
800 万像素 IMX219 模组摄像头
1230 万像素 IMX477 模组摄像头

epaper模块

目前地平线官方正在对C语言的各种库进行开发、适配,所以目前只支持python程序

使用方法

支持的模块

电机、继电器与传感器

目前地平线官方正在对C语言的各种库进行开发、适配,所以目前只支持python程序

使用方法

支持的模块

音频模块

软件

示例程序

FAQ

  • -25°C ~ 95°C (X3M 芯片温度)。



  • 支持做目标跟踪, yolov5支持。 deepsort需要跟地平线官方确认。


  • 支持pytorch,跑模型要做转换的,具体转换操作,可以参考地平线官方的文档。





  • 没固态接口,不能接固态。


  • 没有的,目前主板没有引出PoE接口,不适用PoE模块。



技术支持


联系人:张工
邮箱:3004637648@qq.com
QQ:3004637648
微信:扫下方二维码添加
QRCode SiminZhang.png

说明:进行售后服务前,请准备好客户信息(定货单位、定货人等),以供验证