【转载】旭日派 RDK X3 上使用 WiringPi

旭日X3派WiringPi

安装WiringPi

安装git工具,执行以下命令:

sudo apt update
sudo apt install git-core

通过git在线获取WiringPi的源代码,执行以下命令:

git clone https://gitee.com/study-dp/WiringPi.git

进入WiringPi目录安装WiringPi。执行以下命令:

cd WiringPi
./build

build.sh 脚本会自动完成WiringPi库的编译与安装。

查看命令帮助信息

命令: gpio -h

root@ubuntu:~# gpio 
gpio: At your service!
  Type: gpio -h for full details and
        gpio readall for a quick printout of your connector details

root@ubuntu:~# gpio -h 
gpio: Usage: gpio -v
       gpio -h
       gpio [-g|-1] ...
       gpio [-d] ...
       [-x extension:params] [[ -x ...]] ...
       gpio [-p] <read/write/wb> ...
       gpio <mode/read/write/aread/awritewb/pwm/pwmTone> ...
       gpio <toggle/blink> <pin>
       gpio readall
       gpio unexportall/exports
       gpio export/edge/unexport ...
       gpio wfi <pin> <mode>
       gpio drive <group> <value>
       gpio pwmf <pin> <frequency> 
       gpio pwmd <pin> <duty_cycle> 
       gpio i2cd/i2cdetect
       gpio rbx/rbd
       gpio wb <value>
       gpio gbr <channel>
       gpio gbw <channel> <value>

主要命令说明:

readall:读取所有管脚的信息,显示管脚名称和Physical,BCMxPi三种模式的管脚编号

-g: 命令中的pin参数默认使用 BCM序号,如果设置本参数,则使用旭日X3的gpio内部编号( xPi序号),各模式的编号详情请通过 gpio readall获取

-l: 通过 /sys/class/gpio目录下的文件进行管脚操作,否则都是直接通过操作旭日X3的寄存器操作

-p:使用硬件 Physical 编号作为pin的编码模式

mode: 设置管脚的模式,支持以下模式的设置

in,input: 设置管脚为gpio输入

out,output:设置管脚为gpio输出

pwm,pwmTone: 设置管脚为pwm模式

up: 设置管脚上拉

down:设置管脚下拉

tri,off: 管脚关闭上下拉

read: 读取管脚的输入电平

write: 设置管脚的输出电平

toggle:使管脚的输出电平反转

blink: 使管脚进入到闪烁状态

unexportall:通过 /sys/class/gpio目录下的文件释放所有管脚

exports:显示通过 /sys/class/gpio申请的管脚列表

export/edge/unexport:通过通过 /sys/class/gpio对单个管脚进行申请和释放,设置触发模式

wfi:管脚设置为输入模式,并且设置中断响应模式

drive: 设置管脚的电流驱动强度

pwmf: 设置pwm的时钟周期,输入值为频率,例如48000表示48KHz, 取值范围最小48000

pwmd:设置pwm的高电平占空比,取值范围1-100

i2cd/i2cdetect: 显示I2C总线上的设备信息

rbx/rbd: 读取0-7这一组管脚的电平值

查看管脚信息

命令: gpio readall

root@ubuntu:~# gpio readall
 +-----+-----+-----------+---X3 PI--+-----------+-----+-----+
 | BCM | xPi |    Name   | Physical |   Name    | xPi | BCM |
 +-----+-----+-----------+----++----+-----------+-----+-----+
 |     |     |      3.3v |  1 || 2  | 5v        |     |     |
 |   2 |   9 |     SDA.0 |  3 || 4  | 5v        |     |     |
 |   3 |   8 |     SCL.0 |  5 || 6  | 0v        |     |     |
 |   4 | 101 | I2S0_MCLK |  7 || 8  | TxD.3     | 111 | 14  |
 |     |     |        0v |  9 || 10 | RxD.3     | 112 | 15  |
 |  17 |   6 |   GPIO. 6 | 11 || 12 | I2S0_BCLK | 102 | 18  |
 |  27 |   5 |   GPIO. 5 | 13 || 14 | 0v        |     |     |
 |  22 |  30 |  GPIO. 30 | 15 || 16 | GPIO. 27  | 27  | 23  |
 |     |     |      3.3v | 17 || 18 | GPIO. 7   | 7   | 24  |
 |  10 |  12 | SPI2_MOSI | 19 || 20 | 0v        |     |     |
 |   9 |  13 | SPI2_MISO | 21 || 22 | GPIO. 29  | 29  | 25  |
 |  11 |  14 | SPI2_SCLK | 23 || 24 | SPI2_CSN  | 15  | 8   |
 |     |     |        0v | 25 || 26 | GPIO. 28  | 28  | 7   |
 |   0 | 106 | I2S1_BCLK | 27 || 28 | I2S1_LRCK | 107 | 1   |
 |   5 | 119 |  GPIO.119 | 29 || 30 | 0v        |     |     |
 |   6 | 118 |  GPIO.118 | 31 || 32 | PWM4      | 25  | 12  |
 |  13 |   4 |      PWM0 | 33 || 34 | 0v        |     |     |
 |  19 | 103 | I2S0_LRCK | 35 || 36 | GPIO. 3   | 3   | 16  |
 |  26 | 105 |  GPIO.105 | 37 || 38 | I2S0_SDIO | 104 | 20  |
 |     |     |        0v | 39 || 40 | I2S1_SDIO | 108 | 21  |
 +-----+-----+-----------+----++----+-----------+-----+-----+
 | BCM | xPi |    Name   | Physical |   Name    | xPi | BCM |
 +-----+-----+-----------+---X3 PI--+-----------+-----+-----+

字段说明:

Physical:硬件管脚序号

Name:管脚名称

xPi:旭日X3芯片内部管脚

BCM: 通用编码

管脚信息可以查看 40PIN管脚定义

操作管脚输入输出

读取所有管脚当前的电平状态:

sudo gpio allreadall

设置为输入模式:

sudo gpio mode 26 in

读取管脚电平值:

sudo gpio read 26

设置为输出模式:

sudo gpio mode 26 out

设置管脚输出高电平:

sudo gpio write 26 on

或者

sudo gpio write 26 up

设置管脚输出低电平:

sudo gpio write 26 off

或者

sudo gpio write 26 down

响应管脚的上升沿中断:

sudo gpio wfi 26 rising

响应管脚的下降沿中断:

sudo gpio wfi 26 falling

同时响应管脚的上升、下降沿中断:

sudo gpio wfi 26 both

硬件PWM功能使用

旭日X3派只有两个硬件PWM管脚在 40pin上,分别是 BCM 编码的 12 和 13 号(硬件编码的 32 和 33管脚,对应旭日X3芯片的 25 和 4号管脚)。

硬件PWM的时钟源为192MHz, 分频系数为 1-4000, 所以输出时钟周期为: 48KHz - 192MHz

设置管脚为pwm模式,设置成功后,管脚默认输出48KHz,占空比为50%的脉冲信号:

sudo gpio mode 12 pwm

或者

sudo gpio mode 12 pwmTone

设置pwm的时钟周期,取值范围48000 ~ 192000000(建议不要超过 12MHz):

sudo gpio pwmf 12 48000

设置pwm的占空比,按高电平的百分比设置,取值范围 0 ~ 100:

sudo gpio pwmd 12 50

软件PWM功能使用

旭日X3派40PIN的所有功能管脚都可以通过CPU控制输出高、低电平来模拟PWM。

以下是使用软件PWM的代码逻辑:

设置时钟周期为50Hz,占空比时间分别为循环设置为 2ms、5ms、9ms。

#include <stdio.h>
#include <wiringPi.h>
#include <softPwm.h>

/* Macro config define */
#define PWM_1     25U

/* Parameter define */
static int high_edge_time = 0;   // uint :0.1ms
static int cycle_time     = 200; // uint :0.1ms

int main (void)
{
    /* Initial gpio with chip pin ,if use mapping pin -> wiringPiSetup*/
    wiringPiSetupGpio () ;

    // pinMode (PWM_1, SOFT_PWM_OUTPUT) ;
    printf("cycle_time:%d\n", cycle_time);
    pinMode(PWM_1, OUTPUT);
    softPwmCreate(PWM_1, high_edge_time, cycle_time);

    /* Main loop function */
    for (;;)
    {
        /* Control pwm */
        softPwmWrite(PWM_1, 20); // duty = 20/cycle_time
        delay (5000);
        softPwmWrite(PWM_1, 50);
        delay (5000);
        softPwmWrite(PWM_1, 90);
        delay (5000);
    }
    return 0 ;
}
### 关于 RDK X3 和 YOLO11 的技术文档与实现方案 尽管当前引用中并未提及具体的 RDK X3 和 YOLO11 技术细节,但从已有的参考资料可以推测一些可能的技术路径和资源方向。 #### 1. **RDK X3 平台概述** RDK (Robot Development Kit) 是由地瓜机器人团队推出的一系列开发平台,旨在为开发者提供高性能、易扩展的硬件支持以及丰富的算法。虽然引用主要讨论的是 RDK X5[^1],但 RDK X3 很可能是该系列产品的一个早期版本或简化版。通常情况下,这类开发板会配备 ARM 架构处理器、GPU 加速单元以及多种传感器接口,适合运行复杂的机器学习模型。 对于 RDK X3 的具体规格和技术文档,建议参考官方开发者网站上的 Model Zoo 部分[^1],其中可能会有针对不同型号的具体说明和支持框架列表。 --- #### 2. **YOLO11 模型背景** YOLO(You Only Look Once)是一类实时目标检测算法家族中的成员之一。然而,“YOLO11”并不是标准命名法的一部分;更常见的变体包括 YOLOv3, YOLOv4, YOLOv5 等。如果这里的“YOLO11”是指某个特定定制化版本或者实验分支,则需要进一步确认其实现方式及其适配环境。 一般而言,在嵌入式设备上部署 YOLO 类模型涉及以下几个阶段: - 训练自定义数据集并优化权重文件; - 将 PyTorch/TensorFlow 格式的模型导出为 ONNX 中间表示形式; - 使用工具链完成量化处理以便降低计算复杂度; - 转换成目标硬件所支持的目标格式(如 TensorRT 或 OpenVINO)。 这些流程已在多个公开教程中有详细介绍[^3],可作为迁移至 RDK X3 上的基础指南。 --- #### 3. **从理论到实践:基于 RDK X3 的 YOLO 实施策略** 以下是结合现有知识构建适用于 RDK X3 的 YOLO 解决方案的大致思路: ##### 数据预处理与模型训练 利用第三方开源项目提供的脚本进行标注图像采集,并通过 Transfer Learning 方法微调预训练好的基础网络结构来适应新领域需求。此部分操作可在云端服务器执行以充分利用强大算力资源。 ##### 导出通用中间表达形式(ONNX) 借助 `torch.onnx.export()` 函数或其他类似 API 完成这一转换过程,同时准备好一组小型验证集合用于后续精度评估工作。 ```python import torch dummy_input = torch.randn(10, 3, 224, 224) model.eval() torch.onnx.export(model, dummy_input, "yolov11_model.onnx", verbose=True) ``` ##### 性能调整与移植兼容性改进 引入 INT8 Quantization Techniques 来减少内存占用量的同时维持较高预测准确性水平。此外还需注意某些特殊层节点能否被底层驱动程序有效解析渲染出来等问题。 最后一步就是把最终产物加载进 TROS(Tiny Robot Operating System),从而实现在真实物理世界里的交互功能演示效果展示给用户看啦! --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值