one_channel_hub 移植到CH584M MCU平台(移除WiFi/网络相关代码)
one_channel_hub 移植到CH584M MCU平台移除WiFi/网络相关代码一、移植前准备1. 核心背景CH584M特性沁恒微的低功耗MCU基于RISC-V架构内置BLE 5.0无WiFi外设需适配其裸机/轻量级RTOS开发环境MounRiver Studio 沁恒官方CH58x SDK。原仓库核心模块LoRa射频驱动sx126x/llcc68/lr11xx、RALRadio Abstraction Layer、LoRaHub HAL层是核心WiFi/HTTP/UDP/Web/SNTP/BLE配网是需移除的网络相关模块。2. 环境搭建安装MounRiver StudioMRS导入CH584M官方SDK包含GPIO/SPI/定时器/中断等底层驱动。从原仓库拉取代码git clone https://github.com/Lora-net/one_channel_hub。二、代码裁剪移除网络相关模块1. 删除网络相关文件删除原仓库中以下文件/目录WiFi/HTTP/Web/配网相关# 核心删除项 one_channel_hub/lorahub/main/wifi.c one_channel_hub/lorahub/main/wifi.h one_channel_hub/lorahub/main/http_server.c/h 若有 one_channel_hub/lorahub/main/udp_client.c/h Packet Forwarder网络传输 one_channel_hub/components/wifi_provisioning/ BLE配网 one_channel_hub/doc/ 非代码可选删除 one_channel_hub/tests/ 测试脚本可选删除 one_channel_hub/tools/ 工具脚本可选删除2. 移除代码中网络相关引用1修改lorahub/main/main.c删除WiFi初始化、HTTP服务器、UDP客户端相关代码保留LoRa核心初始化逻辑// 原代码中需删除的片段示例#includewifi.h// 移除WiFi头文件#includehttp_server.h// 移除HTTP头文件// 删除WiFi初始化调用// wifi_sta_init(false);// http_server_start(); // 移除HTTP服务器启动// udp_client_init(); // 移除UDP客户端初始化// 保留LoRa核心初始化lgw_connect();lgw_radio_setup();2修改components/liblorahub/lorahub_hal.c移除ESP32网络/FreeRTOS相关依赖删除WiFi状态关联逻辑// 移除ESP32网络相关头文件#includeesp_netif.h// 删除#includefreertos/FreeRTOS.h// 删除#includefreertos/event_groups.h// 删除// 移除WiFi状态相关宏/变量如WIFI_CONNECTED_BIT等// 删除所有与WiFi状态联动的逻辑如原代码中依赖WiFi连接的Packet Forwarder发送3修改编译配置原仓库基于ESP-IDF的menuconfig配置需删除WiFi/网络相关配置项删除sdkconfig.defaults中CONFIG_WIFI_*、CONFIG_HTTP_*、CONFIG_UDP_*等宏。若使用Makefile/CMake移除WiFi/网络相关的编译依赖如esp_wifi、esp_http_server等组件。三、CH584M底层驱动适配核心步骤原有代码基于ESP32的底层GPIO/SPI/定时器/中断需替换为CH584M的SDK接口。1. SPI驱动适配LoRa射频通信CH584M的SPI外设替代ESP32的SPI驱动示例如下适配SX1262// CH584M SPI初始化替代原esp32 spi_bus_initialize#includeCH58x_common.h#defineSPI_LORA_SCLK_PINGPIO_Pin_2// 自定义引脚需与硬件匹配#defineSPI_LORA_MOSI_PINGPIO_Pin_3#defineSPI_LORA_MISO_PINGPIO_Pin_4#defineSPI_LORA_NSS_PINGPIO_Pin_5#defineSPI_LORA_RESET_PINGPIO_Pin_6#defineSPI_LORA_DIO1_PINGPIO_Pin_7#defineSPI_LORA_BUSY_PINGPIO_Pin_8// SPI初始化函数voidlora_spi_init(void){// 配置SPI引脚为复用功能GPIO_SetFunc(SPI_LORA_SCLK_PIN,GPIO_FUN_SPI0_SCK);GPIO_SetFunc(SPI_LORA_MOSI_PIN,GPIO_FUN_SPI0_MOSI);GPIO_SetFunc(SPI_LORA_MISO_PIN,GPIO_FUN_SPI0_MISO);// 配置NSS为GPIO输出软件控制GPIO_ModeCfg(SPI_LORA_NSS_PIN,GPIO_ModeOut_PP_5mA);GPIO_SetBits(SPI_LORA_NSS_PIN);// 片选默认拉高// SPI0配置主机模式时钟极性0相位0速率1MHzSPI0_MasterDefInit();SPI0_SetClockDiv(SPI_CLK_DIV_16);// CH584M主频60MHz分频后3.75MHz可调整}// SPI读写函数替代原ESP32 spi_device_transmituint8_tspi_write_read(uint8_ttx_data){while(SPI0_GetTxFIFOFreeNum()0);SPI0_SendData(tx_data);while(SPI0_GetRxFIFOCount()0);returnSPI0_RecvData();}// LoRa片选控制voidlora_nss_set(uint8_tstate){if(state)GPIO_SetBits(SPI_LORA_NSS_PIN);elseGPIO_ResetBits(SPI_LORA_NSS_PIN);}2. GPIO/中断适配LoRa DIO1/BUSY/RESETCH584M的GPIO中断替代ESP32的中断逻辑以DIO1中断为例处理LoRa接收完成// GPIO初始化voidlora_gpio_init(void){// RESET引脚输出GPIO_ModeCfg(SPI_LORA_RESET_PIN,GPIO_ModeOut_PP_5mA);GPIO_SetBits(SPI_LORA_RESET_PIN);// 复位默认拉高// BUSY引脚输入GPIO_ModeCfg(SPI_LORA_BUSY_PIN,GPIO_ModeIN_PU);// DIO1引脚输入中断上升沿触发GPIO_ModeCfg(SPI_LORA_DIO1_PIN,GPIO_ModeIN_PU);GPIO_ITModeCfg(SPI_LORA_DIO1_PIN,GPIO_IT_RisingEdge);// 上升沿中断PFIC_EnableIRQ(GPIO_IRQn);// 使能GPIO中断}// GPIO中断服务函数__interrupt__attribute__((used))voidGPIO_IRQHandler(void){if(GPIO_GetITFlag(SPI_LORA_DIO1_PIN)){GPIO_ClearITFlag(SPI_LORA_DIO1_PIN);// 清除中断标志lora_rx_handler();// 调用LoRa接收处理函数需实现}}3. 定时器适配替代ESP32的esp_timerCH584M的通用定时器替代ESP32的高精度定时器用于LoRa时序控制// 定时器初始化1ms中断voidtimer_init(void){TMR_TimerCfg(TMR0,TMR_MODE_SYSCLK,TMR_CLK_DIV_60);// 60MHz/601MHzTMR_TimerCountCfg(TMR0,1000,TMR_COUNT_MODE_DOWN);// 1MHz计数1000次1msTMR_ITCfg(TMR0,ENABLE,TMR_IT_END_CNT);// 计数结束中断PFIC_EnableIRQ(TMR0_IRQn);// 使能定时器中断TMR_TimerRun(TMR0,ENABLE);// 启动定时器}// 定时器中断服务函数用于LoRa超时/轮询__interrupt__attribute__((used))voidTMR0_IRQHandler(void){if(TMR_GetITFlag(TMR0,TMR_IT_END_CNT)){TMR_ClearITFlag(TMR0,TMR_IT_END_CNT);// 此处添加LoRa定时处理逻辑如轮询BUSY状态、超时检测}}4. RAL层适配Radio Abstraction Layer原RAL层基于ESP32的硬件抽象需修改为CH584M的接口// 修改 components/smtc_ral/ral_sx126x.c 中的硬件操作函数// 示例替换ESP32的SPI读写为CH584M的SPI函数ral_status_tral_sx126x_write(constral_t*ral,constuint16_taddr,constuint8_t*data,constuint16_tsize){lora_nss_set(0);// 拉低片选spi_write_read(0x02);// 写命令spi_write_read((addr8)0xFF);// 地址高字节spi_write_read(addr0xFF);// 地址低字节for(uint16_ti0;isize;i){spi_write_read(data[i]);// 写数据}lora_nss_set(1);// 拉高片选returnRAL_STATUS_OK;}ral_status_tral_sx126x_read(constral_t*ral,constuint16_taddr,uint8_t*data,constuint16_tsize){lora_nss_set(0);// 拉低片选spi_write_read(0x03);// 读命令spi_write_read((addr8)0xFF);// 地址高字节spi_write_read(addr0xFF);// 地址低字节for(uint16_ti0;isize;i){data[i]spi_write_read(0xFF);// 读数据}lora_nss_set(1);// 拉高片选returnRAL_STATUS_OK;}// 替换复位函数为CH584M的GPIO操作ral_status_tral_sx126x_reset(constral_t*ral){GPIO_ResetBits(SPI_LORA_RESET_PIN);DelayMs(10);// CH584M的延时函数GPIO_SetBits(SPI_LORA_RESET_PIN);DelayMs(50);returnRAL_STATUS_OK;}四、LoRaHub核心逻辑适配1. 移除Packet Forwarder的网络传输原Packet Forwarder通过UDP将LoRa数据包发送到LNS网络服务器需删除该逻辑改为本地处理如串口打印数据包// 修改 components/liblorahub/lorahub_hal_rx.c 中的接收处理函数voidlgw_hal_rx_packet_process(void){structlgw_pkt_rx_srx_pkt;if(lgw_hal_rx_read(rx_pkt)LGW_HAL_SUCCESS){// 原逻辑通过UDP发送到LNS → 删除// 新逻辑串口打印数据包CH584M的UARTuart_printf(LoRa RX Packet: );for(uint16_ti0;irx_pkt.size;i){uart_printf(%02X ,rx_pkt.payload[i]);}uart_printf(\r\n);}}2. 移除FreeRTOS依赖原代码使用FreeRTOS的事件组、任务等CH584M若用裸机需替换为轮询/中断逻辑// 原FreeRTOS任务示例// xTaskCreate(lora_task, lora_task, 4096, NULL, 5, NULL);// 替换为裸机主循环intmain(void){// 初始化CH584M外设SystemInit();// 官方SDK初始化uart_init();// 串口初始化用于调试lora_spi_init();lora_gpio_init();timer_init();// 初始化LoRalgw_connect();lgw_radio_setup();lgw_hal_rx_config();// 配置LoRa接收参数频率、扩频因子等// 裸机主循环while(1){lgw_hal_rx_packet_process();// 处理接收的LoRa数据包DelayMs(10);// 短延时降低CPU占用}}五、编译与调试1. 编译配置在MounRiver Studio中创建CH584M工程将裁剪后的核心代码LoRa驱动、RAL、HAL层加入工程。配置编译选项编译器RISC-V GCCMRS内置。宏定义添加CONFIG_RADIO_TYPE_SX1262根据实际使用的LoRa射频芯片、CH584M等。链接脚本使用CH584M官方链接脚本适配内存布局。2. 调试注意事项硬件接线确认CH584M与LoRa模块如SX1262的SPI、GPIO引脚连接正确。射频参数根据实际硬件配置LoRa的频率、扩频因子、带宽等修改lorahub_hal.c中的rxrf_conf、rxif_conf。串口调试通过CH584M的UART打印调试信息确认LoRa初始化、接收/发送是否正常。六、关键注意点射频驱动兼容性CH584M的SPI速率需匹配LoRa芯片SX126x建议≤10MHz需调整SPI0_SetClockDiv。中断优先级CH584M的GPIO中断、定时器中断优先级需合理配置避免冲突。功耗优化CH584M支持低功耗模式可在LoRa休眠时进入MCU低功耗降低功耗。代码裁剪彻底性需删除所有ESP32特有头文件如esp_log.h、freertos/*.h替换为CH584M的日志/调试方式如串口打印。通过以上步骤可将one_channel_hub的核心LoRa功能移植到CH584M平台并彻底移除WiFi/网络相关代码实现裸机环境下的LoRa数据包接收/处理。

相关新闻

9999999999999

9999999999999

9999999999

2026/7/3 18:45:19 阅读更多 →
9999999999

9999999999

999999999

2026/7/5 14:57:46 阅读更多 →
ADC相关

ADC相关

1.简述 IIC 的读时序 主机发送起始信号(S):SDA 从高变低,SCL 保持高电平;主机发送7 位 / 10 位从机地址 读位(R1),SCL 同步时钟,从机接收后返回ACK 应答(SD…

2026/7/3 18:45:27 阅读更多 →

最新新闻

【从零构建分布式在线评测系统】二、Judge0服务器上的心跳程序

【从零构建分布式在线评测系统】二、Judge0服务器上的心跳程序

上一篇介绍了整体构架,这一篇介绍如何实现心跳程序。在ubuntu上使用.net程序有不少方法,我们采用使用标准框架的方式。一、工程配置1、类型:控制台应用——莫担心,它会得到一个dll,部署这个dll即可2、目标框架&#xf…

2026/7/7 5:29:34 阅读更多 →
【Java课程设计/毕业设计】基于 SpringBoot+Vue 的校园体育赛事数据可视化系统的设计与实现 基于 SpringBoot 的大学生运动会数字化管理平台【附源码、数据库、万字文档】

【Java课程设计/毕业设计】基于 SpringBoot+Vue 的校园体育赛事数据可视化系统的设计与实现 基于 SpringBoot 的大学生运动会数字化管理平台【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/7 5:25:32 阅读更多 →
《深入理解计算机系统》计算机系统漫游

《深入理解计算机系统》计算机系统漫游

《深入理解计算机系统》(简称 CSAPP)书中 “计算机系统漫游” 部分的核心内容。这部分通常作为全书的引言或第一章,旨在宏观地描绘计算机系统的构成和运作方式。 信息的表示与处理(核心基础) 计算机系统处理的所有信息…

2026/7/7 5:23:32 阅读更多 →
远程协助软件推荐 远程协助软件哪个好

远程协助软件推荐 远程协助软件哪个好

日常帮亲友排查设备故障、异地处理工作难题,都需要靠谱的远程协助,便捷高效的远程协助能大幅降低跨设备、跨地域的操作成本。哪款远程协助软件体验比较呢?无界趣连2.0凭借轻量化设计与扎实的使用体验,成为个人日常远程协助的优选工…

2026/7/7 4:55:49 阅读更多 →
AD15 敷铜(Polygon Pour) 的完整操作,按步骤做即可,适合顶层/底层GND或电源敷铜。

AD15 敷铜(Polygon Pour) 的完整操作,按步骤做即可,适合顶层/底层GND或电源敷铜。

一、准备工作- 确保 板框(Board Shape) 已画好(机械层 Mechanical 1)。​- 布局、走线基本完成,DRC 先过一遍。​- 切换到要敷铜的层:底部层标签点 Top Layer(顶层) 或 Bottom Layer…

2026/7/7 4:55:49 阅读更多 →
NET 10:Oxigraph 的 FFI 桥接实践

NET 10:Oxigraph 的 FFI 桥接实践

架构概览┌──────────────────────────────────────────────────────────┐ │ .NET 应用层 │ │ ┌──────────┐ ┌────────────────…

2026/7/7 4:55:49 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻