当前位置: 首页 > article >正文

二十七、RZN2L CherryUSB移植与性能对比

一、目的/概述1、cherryusb还没有人支持瑞萨芯片我们尝试在RZN2L CR52上移植CherryUSB协议栈2、在rzn2l芯片上实现USB CDC ACM 功能(实现cherryusb hal)3、对比CherryUSB与瑞萨原厂USB例程的性能差异4、验证全速12Mbps和高速480Mbps模式下的传输性能二、CherryUSB简介2.1 什么是CherryUSBCherryUSB是一个轻量级的USB主机和设备协议栈具有以下特点特性说明代码量小核心代码约10KB适合资源受限的MCU移植简单统一的HAL抽象层只需实现几个底层函数性能优秀优化的数据传输路径支持DMA功能完整支持USB Host/Device包含常见USB类社区活跃持续更新维护文档齐全2.2 相关资源资源链接官方仓库https://github.com/cherry-embedded/CherryUSB官方文档https://cherryusb.readthedocs.io/示例代码https://github.com/cherry-embedded/CherryUSB/tree/master/demo移植指南https://cherryusb.readthedocs.io/zh-cn/latest/quick_start/transplant.html三、移植涉及的文件3.1 CherryUSB核心文件从CherryUSB官方仓库复制以下文件到工程cherryusb_port/ ├── cherryusb/ # CherryUSB核心库 │ ├── core/ # USB核心协议 │ │ └── usbd_core.c # USB设备核心 │ ├── class/ # USB类实现 │ │ └── cdc/ # CDC类 │ ├── common/ # 公共定义 │ ├── osal/ # OS抽象层 │ │ └── usb_osal_none.c # 无OS适配 │ └── usb_config.h # USB配置 ├── config/ # 配置文件 │ └── cherryusb_config.h # CherryUSB配置 ├── examples/ # 示例代码 │ ├── cdc_acm_descriptor.c # CDC描述符 │ ├── cdc_acm_descriptor.h │ ├── cdc_acm_example.c # CDC示例 │ └── cdc_acm_example.h └── hal/ # 硬件抽象层 ├── usb_dc_rzn2l.c # RZN2L USB设备驱动 ├── usb_dc_rzn2l.h ├── usb_interrupt_override.c # 中断处理 ├── usb_interrupt_override.h └── usb_reg_rzn2l.h # 寄存器定义3.2 HAL层移植文件移植CherryUSB需要实现以下HAL层函数文件功能usb_dc_rzn2l.cUSB设备控制器驱动实现初始化、端点配置、数据收发usb_dc_rzn2l.h驱动头文件定义数据结构和函数接口usb_interrupt_override.cUSB中断处理覆盖默认中断处理usb_reg_rzn2l.hRZN2L USB寄存器定义3.3 应用层文件文件功能hal_entry.c主入口初始化USB并调用CDC示例cdc_acm_example.cCDC ACM示例实现回显和速度测试cdc_acm_descriptor.cUSB描述符定义debug_shell.c调试命令行3.4 工程配置文件文件说明script/fsp_xspi0_boot.ld链接脚本.cprojecte2studio工程配置rzn_gen/hal_data.cFSP硬件配置四、软件流程4.1 USB初始化流程4.2 USB枚举流程4.3 CDC数据传输流程4.3.1 接收流程OUT方向4.3.2 发送流程IN方向4.4 中断处理流程4.5 主循环流程五、测试方法5.1 测试环境项目配置MCURenesas RZN2L内核Cortex-R52 400MHz编译器ARM GCC 13.3.1IDEe2studioUSB模式DeviceCDC ACM测试工具Python pyserial5.2 测试脚本使用Python脚本test_cdc_speed.py进行速度测试# 测试原理 # OUT测试主机写入10MB数据到设备计算速度 # IN测试设置DTR1设备循环发送数据主机读取10MB计算速度 import serial import time import sys test_comx sys.argv[1]# COM端口号 test_maxsize 10*1024*1024# 10MB test_data b\xAA*4096 # OUT测试 deftest_cdc_out(): send_count 0 begin time.time() while send_count test_maxsize: txdatalen test_serial.write(test_data) send_count txdatalen elapsed time.time()- begin speed_mbps (send_count /1024/1024)/ elapsed print(cdc out speed %.3f MB/s% speed_mbps) # IN测试 deftest_cdc_in(): read_count 0 begin time.time() while read_count test_maxsize: data test_serial.read(test_maxsize) read_count len(data) elapsed time.time()- begin speed_mbps (read_count /1024/1024)/ elapsed print(cdc in speed %.3f MB/s% speed_mbps)5.3 测试步骤1、编译烧录固件到RZN2L开发板2、连接USB线到PC确认设备枚举成功3、记录COM端口号如COM114、运行测试脚本python test_cdc_speed.py COM115、记录OUT和IN速度六、性能测试结果6.1 CherryUSB性能全速模式Full-Speed 12 Mbps USB CDC ACM Module: USB_IP0 Mode: Peripheral Speed: Full-Speed (12 Mbps) EP IN: 0x81 max64 EP OUT: 0x02 max64 Buffer: RX2048 TX2048 测试结果 cdc out speed 0.887 MB/s (10485760 B / 11.273 s) cdc in speed 0.902 MB/s (10526720 B / 11.134 s)高速模式High-Speed 480 Mbps USB CDC ACM Module: USB_IP0 Mode: Peripheral Speed: High-Speed (480 Mbps) EP IN: 0x81 max512 EP OUT: 0x02 max512 Buffer: RX16384 TX16384 测试结果 cdc out speed 25.564 MB/s (10485760 B / 0.391 s) cdc in speed 14.797 MB/s (10526720 B / 0.676 s)6.2 瑞萨原厂例程性能全速模式Full-Speed 12 Mbps[USB] Module: USB_IP0 [USB] Mode: Peripheral [USB] Speed: Low-Speed [USB] DMA: OFF [USB] BENCH_BUF_SIZE: 4096 测试结果 OUT: 0.16 MB/s (10485760 B in 61620 ms) IN: 0.89 MB/s (10485760 B in 11175 ms)高速模式High-Speed 480 Mbps[USB] Module: USB_IP0 [USB] Mode: Peripheral [USB] Speed: High-Speed [USB] DMA: OFF [USB] BENCH_BUF_SIZE: 4096 测试结果 OUT: 5.84 MB/s (10485760 B in 1712 ms) IN: 19.65 MB/s (10485760 B in 509 ms)6.3 性能对比全速模式对比Full-Speed 12 Mbps方向CherryUSB瑞萨原厂对比OUT (主机→设备)0.887 MB/s0.16 MB/sCherryUSB快5.5倍IN (设备→主机)0.902 MB/s0.89 MB/s基本持平高速模式对比High-Speed 480 Mbps方向CherryUSB瑞萨原厂对比OUT (主机→设备)25.564 MB/s8.25 MB/sCherryUSB快3.1倍IN (设备→主机)14.797 MB/s19.36 MB/s瑞萨快1.3倍性能分析全速模式OUT方向CherryUSB大幅领先5.5倍IN方向基本持平高速模式OUT方向CherryUSB领先3.1倍IN方向瑞萨原厂略优整体表现CherryUSB在OUT方向主机发送到设备性能优势明显七、移植要点7.1 关键配置cherryusb_config.h中的关键配置#defineUSBD_IRQHandlerUSB_interrupt_override_IRQHandler #defineUSBD_BASER_USBF_BASE #defineCONFIG_USBDEV_EP_NUM10 #defineCONFIG_USBDEV_RX_BUFSIZE2048 #defineCONFIG_USBDEV_TX_BUFSIZE20487.2 中断处理RZN2L的USB中断需要特殊处理通过usb_interrupt_override.c覆盖默认中断voidusb_interrupt_init(void){ // 配置GIC中断 R_BSP_IrqCfgEnable(USB_INT_IRQn,3,NULL); } voidUSB_interrupt_override_IRQHandler(void){ externvoidUSBD_IRQHandler(uint8_t busid); USBD_IRQHandler(0); }7.3 描述符配置CDC ACM描述符需要根据实际需求配置// 端点配置 #defineCDC_IN_EP0x81 #defineCDC_OUT_EP0x02 #defineCDC_INT_EP0x83 // 全速端点大小 #defineCDC_MAX_MPS_FS64 // 高速端点大小 #defineCDC_MAX_MPS_HS512八、总结项目说明移植难度中等需实现HAL层和中断处理代码量约20KB含CDC类全速性能OUT 0.887 MB/s, IN 0.902 MB/s高速性能OUT 25.564 MB/s, IN 14.797 MB/s优势OUT方向性能优秀代码轻量移植简单适用场景需要高性能USB传输的嵌入式应用核心要点1、CherryUSB移植主要工作在HAL层需实现usb_dc_rzn2l.c中的底层驱动2、中断处理需要特殊覆盖确保USB中断正确触发3、高速模式下性能显著优于全速建议优先使用高速模式4、OUT方向性能提升明显适合大量数据接收场景九、附录测试环境MCURenesas RZN2L内核Cortex-R52 400MHz编译器ARM GCC 13.3.1IDEe2studioUSB连接USB Type-C测试数据量10MB文件结构27_rzn2l_cherryusb_port/ ├── rzn2l_cherryusb_port/ # CherryUSB移植工程 │ ├── cherryusb_port/ # CherryUSB库和移植文件 │ ├── src/ # 应用代码 │ ├── rzn_gen/ # FSP生成的配置 │ ├── script/ # 链接脚本 │ └── tools/ # 测试工具 └── RZN2L_RSK_usb_pcdc/ # 瑞萨原厂例程对比用 ├── src/ # 应用代码 ├── rzn/ # FSP库 └── tools/ # 测试工具相关链接资源说明CherryUSB仓库https://github.com/cherry-embedded/CherryUSBRZN2L产品页https://www.renesas.cn/zh/products/rz-n2lFSP文档https://github.com/renesas/rzn-fsp/releases/tag/v2.0.0

相关文章:

二十七、RZN2L CherryUSB移植与性能对比

一、目的/概述1、cherryusb还没有人支持瑞萨芯片,我们尝试在RZN2L CR52上移植CherryUSB协议栈2、在rzn2l芯片上实现USB CDC ACM 功能(实现cherryusb hal)3、对比CherryUSB与瑞萨原厂USB例程的性能差异4、验证全速(12Mbps)和高速(4…...

为什么你需要m4s-converter:让B站缓存视频重获自由的秘密武器

为什么你需要m4s-converter:让B站缓存视频重获自由的秘密武器 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经遇到过这样的…...

告别硬件!用OneNET官方simulate-device工具5分钟搞定MQTT设备云端调试

5分钟实现云端MQTT调试:OneNET模拟设备实战指南 物联网开发中最令人头疼的环节莫过于硬件与云端的联调——硬件没到位时开发停滞,硬件到手后又要面对各种通信问题。OneNET的simulate-device工具彻底改变了这种被动局面,它让开发者能在零硬件依…...

别再手动下载了!用Chocolatey在Windows上一键安装Zookeeper 3.8.0

告别繁琐配置:用Chocolatey在Windows上极速部署Zookeeper 每次在Windows环境下部署Zookeeper,你是否还在重复下载压缩包、配置环境变量、修改配置文件的传统流程?对于追求效率的开发者而言,这种手动操作不仅耗时耗力,还…...

AI支付架构选型:Card Rails与Agent Rails的深度对比与实践指南

1. 项目概述:AI支付架构的十字路口最近在设计和落地几个AI驱动的支付系统时,我反复被一个核心的架构选择所困扰:是采用“Card Rails”还是“Agent Rails”?这不仅仅是技术选型,更是两种截然不同的产品哲学和风险控制思…...

3步解锁百度网盘满速下载:告别限速困扰的完整方案

3步解锁百度网盘满速下载:告别限速困扰的完整方案 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘的非会员下载速度而烦恼吗?面对100KB/…...

CM-GAI:融合最优传输与连续介质力学的物理约束生成模型

1. 项目概述:当连续介质力学遇见最优传输在工程与材料科学的深水区,我们常常面临一个令人头疼的“数据荒”问题:极端条件下的物理场数据,比如材料在接近熔点的应力-应变行为,或者结构在超高冲击速度下的瞬态变形&#…...

GPU硬件操作强度与LLM推理效率优化实践

1. 硬件操作强度(HOI)与LLM推理效率的深度解析在GPU加速的大型语言模型推理场景中,我们常常遇到一个看似矛盾的现象:计算单元利用率不足的同时,显存带宽却成为瓶颈。这种现象的根源在于硬件操作强度(Hardwa…...

ARMv8 A64指令集SIMD与浮点运算优化指南

1. A64指令集SIMD与浮点运算架构解析在ARMv8架构中,A64指令集的SIMD(单指令多数据流)和浮点运算单元构成了高性能计算的核心引擎。这套指令集的设计体现了现代处理器架构中数据级并行(DLP)的精髓——通过单条指令同时处…...

从恒流源到差动放大:铂电阻测温电路的优化路径与实践

1. 铂电阻测温基础与设计挑战 铂电阻作为工业测温的中坚力量,其核心优势在于稳定的物理特性。PT100在0℃时标称电阻为100Ω,温度系数为0.385Ω/℃。这个看似简单的参数背后,却隐藏着电路设计的三大矛盾:灵敏度与噪声的博弈、线性度…...

Gemini Deep Research调用失败?5类报错代码详解+官方未公开的API绕过方案(限时技术内参)

更多请点击: https://intelliparadigm.com 第一章:Gemini Deep Research功能怎么用 Gemini Deep Research 是 Google 推出的面向专业研究者的增强型推理能力模块,专为长上下文分析、跨文档信息整合与假设验证设计。启用该功能需通过 Gemini …...

Ubuntu 20.04虚拟机重启后断网?别慌,用Netplan配置静态IP一劳永逸(附避坑指南)

Ubuntu 20.04虚拟机网络配置终极指南:Netplan静态IP与持久化方案 当你兴奋地启动Ubuntu 20.04虚拟机准备大展身手时,突然发现网络连接消失了——这不是个别现象。许多开发者在本地虚拟化环境或云平台中都遭遇过类似困扰。本文将彻底解决这个"幽灵断…...

ChatSVA:多智能体框架革新硬件验证中的SVA生成

1. ChatSVA:硬件验证领域的SVA生成革命在集成电路设计领域,功能验证已成为制约开发效率的最大瓶颈。据统计,现代芯片开发周期中超过50%的时间消耗在功能验证环节,而SystemVerilog断言(SVA)作为形式化验证和…...

Midjourney Chlorophyll印相实战手册(含独家--sref权重调优表与叶脉纹理增强公式)

更多请点击: https://intelliparadigm.com 第一章:Midjourney Chlorophyll印相的技术起源与美学范式 Chlorophyll印相并非传统暗房工艺的简单复刻,而是Midjourney V6模型在跨模态语义理解基础上,对植物色素光学响应机制进行算法化…...

CC2530项目实战:用OLED屏做个简易温湿度显示器(基于DHT11传感器)

CC2530实战:基于DHT11的OLED温湿度监测系统开发指南 在嵌入式开发领域,将传感器数据可视化是物联网项目的核心技能之一。CC2530作为一款经典的51内核单片机,搭配0.96寸OLED屏幕和DHT11温湿度传感器,可以构建一个低成本但功能完整的…...

拒绝“见光死”:为什么真正的全域店群RPA必须内置原生指纹浏览器内核?

大家好,我是林焱,一名专注电商底层业务逻辑与企业级 RPA 自动化架构定制的独立开发者。 在 CSDN 的技术交流群里,我经常会遇到一些开发者抛出这样的疑问:“林大,我用 Python 写了一套并发脚本,去管理公司旗…...

AI工作流框架实战:从脚本到自动化流程的架构设计与应用

1. 项目概述:当AI遇上工作流最近在折腾自动化工具链,发现一个挺有意思的项目叫ai-flow。这名字听起来就挺直白,AI 工作流。简单来说,它就是一个用代码来编排和自动化AI任务(比如调用大语言模型、处理数据、执行特定操…...

本地AI网关实战:统一管理多模型服务,实现智能路由与成本控制

1. 项目概述:一个本地化的AI网关如果你正在同时使用多个AI模型服务商,比如OpenAI、Anthropic、Google Gemini,或者还在本地运行着Ollama、vLLM这样的模型,那你一定体会过那种切换的繁琐。每个客户端、每个脚本都要配置不同的API密…...

别再死记硬背公式了!用‘能量流动’视角图解RLC二阶电路,轻松理解零输入响应

能量流动视角:用物理直觉破解RLC二阶电路零输入响应之谜 想象一下,你手中握着一个透明的能量沙漏。上层的沙子(电能)缓缓流入下层(磁能),又因为重力作用回弹,形成有节奏的流动——这…...

人文艺术体系清单——衣冠服饰体系

一、历朝服饰考据清单(主流汉地服饰)考据要求:完整复原形制、剪裁结构、面料制式、色彩规范、时代特征、人文气运、上古图腾溯源,对齐本体系地脉气运、人文文气、先天图腾大道逻辑。上古时期:玄鸟衣冠、上古祭服、原始…...

ARM Firmware Suite与Evaluator-7T开发板实战指南

1. ARM Firmware Suite与Evaluator-7T开发板概述在嵌入式系统开发领域,ARM架构处理器因其出色的能效比和丰富的生态系统支持,已成为工业控制、物联网设备和消费电子等领域的首选方案。ARM Firmware Suite(AFS)是ARM公司针对其处理…...

Armv8/v9架构中的A64系统指令与预测限制机制详解

1. A64系统指令概述在Armv8/v9架构中,A64系统指令(System Instructions)是处理器特权级别操作的核心机制。这些指令运行在EL1及以上异常级别,用于控制系统寄存器、内存管理单元、虚拟化扩展和安全状态等关键功能。与常规数据处理指令不同,系统…...

独立开发者实战:AI编程的泥泞战壕与生存指南

1. 从“氛围编程”到真实战场:一个独立开发者的自白如果你最近也在关注独立开发或者AI编程工具,那你一定听过“氛围编程”这个词。它听起来很酷,对吧?仿佛你只需要对着AI描述一下心中的“氛围感”,一个完美的应用就能应…...

让Linux桌面工作流更高效:Sticky便签应用深度解析

让Linux桌面工作流更高效:Sticky便签应用深度解析 【免费下载链接】sticky A sticky notes app for the linux desktop 项目地址: https://gitcode.com/gh_mirrors/stic/sticky 在Linux桌面环境中,快速记录和访问临时信息是每个用户都会遇到的日常…...

基于深度学习的涂胶缺陷类型检测:数据集处理与YOLOv8模型实现

基于深度学习的涂胶缺陷类型检测:数据集处理与YOLOv8模型实现 摘要 涂胶工艺在智能制造中具有广泛的应用,尤其在汽车制造、新能源电池封装等领域,其质量直接关系到产品的密封性、绝缘性和结构可靠性。传统的涂胶缺陷检测依赖人工目检或规则式机器视觉方法,存在效率低、精…...

Midjourney V6水彩模式突然失效?紧急修复方案:3个隐藏--style参数+2个替代性sref锚点+1键重置工作流

更多请点击: https://intelliparadigm.com 第一章:Midjourney V6水彩模式失效的真相溯源 Midjourney V6 发布后,大量用户反馈 --style watercolor 参数不再触发预期的水彩渲染效果,生成图像趋于写实或默认风格。这一现象并非 UI …...

从相关性反馈到视觉理解:计算机视觉检索技术的演进与落地

1. 从“荒谬”到“范式转移”:一位计算机视觉先驱的二十年跋涉1995年,当互联网还处于襁褓之中,用技术自动搜索图片的想法听起来近乎“荒谬”。这是微软亚洲研究院副院长、首席研究员芮勇博士在回顾自己研究生涯起点时的感慨。二十多年后&…...

AI编程助手高效协作:Cursor与Claude Code开发者工具箱实战指南

1. 项目概述:一个为AI编程时代量身定制的开发者工具箱如果你和我一样,日常开发已经从传统的IDE搜索引擎模式,逐渐转向与Cursor、Claude Code等AI编程助手深度协作,那你一定遇到过类似的痛点:每次开启一个新项目&#x…...

SystemVerilog仿真探秘:从delta-cycle到时间片的时序解析

1. 揭开SystemVerilog仿真的神秘面纱 刚接触SystemVerilog仿真时,很多人都会被"delta-cycle"和"时间片"这些概念搞得一头雾水。我刚开始学习时也是这样,直到在实际项目中遇到了信号竞争问题,才真正理解这些概念的重要性。…...

基于LLM的Python脚本自我进化:构建AI驱动的代码优化框架

1. 项目概述:当Python脚本学会自我进化几年前,如果有人告诉我,我写的Python脚本能在我喝咖啡的时候自己给自己“打补丁”、优化逻辑,我肯定会觉得这是科幻小说里的情节。但今天,这已经是我日常工作流的一部分。这个项目…...