免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

ASR6505 LoRa SoC开发实战:从SDK环境搭建到PingPong通信调通

ASR6505 LoRa SoC开发实战:从SDK环境搭建到PingPong通信调通 简介ASR6505官方资料与LoRa驱动压缩包专为物联网嵌入式开发者和硬件工程师准备覆盖从芯片选型到LoRaWAN入网的全链路开发需求。资料基于ASR6505_Release_20191129版本整理既包含芯片技术规格、引脚定义、电源需求等开发文档也提供可用的驱动源码和IAR工程可直接移植到Linux或RTOS环境配合原理图与PCB文件能大幅降低基于LoRa技术的智能城市、农业监控、物流追踪等场景的研发门槛。包内共372个文件以136个.h头文件、100个.c源码文件、39个PDF文档为主另有IAR工程配置.ewp/.eww、硬件设计文件.dsn/.pcb及调试辅助脚本压缩包约55.18MB目录结构按开发、驱动、硬件分层便于检索。目前已有828人学习下载适合需要快速掌握ASR6505驱动编写、LoRaWAN协议接入或进行硬件调试的工程师参考。 做了几年LORA相关的物联网项目最近因为一个功耗敏感型的采集终端选型又重新把ASR6505这颗芯片翻出来仔细啃了一遍。这芯片很有意思它把MCU和LORA射频收发器封在一起SX1262的射频内核ARM Cortex-M0的核价格又压得比较低非常适合做电池供电的远距离数据采集节点。但痛点也很明显官方资料分散SDK的坑不少驱动环境配置对新手来说更是第一道坎。这篇就把我从找资料到把驱动跑起来再到调通通信的完整过程记录下来给准备入坑的朋友一份能直接照着做的参考。1. 项目整体思路这芯片到底适合做什么以及资料从哪找1.1 核心需求解析为什么选ASR6505而不是SX1262或者LoRaWAN模组先说选型逻辑。如果你只是玩一两个样机直接买现成的LORA模组最省事。但如果要量产比如做几百上千个采集节点模组的成本优势就没了这时候ASR6505这种SoC方案的优势就出来了——它把MCU和射频做在一起外围器件很少BOM成本可以压得非常低。ASR6505的定位其实很明确它是一颗高度集成的低功耗LoRa SoC。内部集成的MCU是ARM Cortex-M0主频可以跑到48MHzFlash有128KBSRAM有16KB。这个配置跑一个简单的传感器采集LORA上报协议栈完全够用。射频部分就是Semtech SX1262的内核支持150MHz到960MHz的频率范围你不管是做433M还是470M还是868M或者915M的频段都能覆盖。还有一个关键点ASR6505有LoRaWAN协议栈的官方支持如果你想快速接入标准LoRaWAN网络不用自己折腾MAC层的时序和加密。但如果像我一样是做私有协议的点对点或者星型网络就用它的裸射频驱动自由度更高延迟也可以做得更低。1.2 官方资料的获取渠道Gitee仓库是主力官网为辅ASR6505的资料获取说实话刚接触的时候有点绕。我踩了几次弯路之后总结下来核心渠道就两个第一个是Gitee上的官方SDK仓库只要在Gitee搜索框里输入“ASR6505”就能看到ASR官方维护的SDK。这个仓库里包含了完整的驱动代码、示例工程、芯片手册的中文版、硬件参考设计甚至还有PCB封装库。这个仓库是整个开发过程中最重要的资料源比官网好用的多。第二个是翱捷科技官网上面有ASR6505的产品页可以下载Datasheet和硬件设计指南。不过官网的注册和下载流程稍有点繁琐建议优先把Gitee仓库拉下来。提示拉代码的时候一定要用git clone把整个仓库完整拉下来不要只下载Zip。因为SDK里面有一些submodule的子模块引用下载Zip会缺文件导致编译直接报错。2. 官方SDK的结构拆解不搞清楚目录结构你连东西在哪都找不到2.1 SDK目录结构解析每个文件夹是干什么的把SDK拉下来之后第一件事不是急着打开Keil编译而是先把目录结构看懂。我第一次拿到这个SDK的时候说实话有点懵目录嵌套很深命名也不是一眼就懂。用了几周之后才真正摸清楚它的组织逻辑。SDK的根目录下几个关键的文件夹和它们的用途是这样的drivers目录这是最核心的驱动代码目录。里面有uart、spi、i2c、gpio、adc、pwm这些外设的驱动还有radio驱动也就是LORA射频的寄存器操作封装。这个目录下面的代码就是你在这个芯片上做应用开发的地基。platform目录这个目录存放的是芯片底层的启动代码和系统时钟配置。比如芯片上电之后时钟从哪里来主频怎么配中断向量表怎么跳转都在这下面。一般情况不用动除非你要折腾低功耗模式。application目录这个目录放的是应用层的示例代码。比如LoRaWAN的终端示例、PingPong点对点通信示例、Sleep低功耗示例等。这些示例工程是你快速上手的最好入口。example目录这个目录下有一部分更细化的外设示例比如单独的GPIO翻转、ADC采集等相当于一个个小demo。理解了这个结构你就有了一张地图先跑通示例然后参考示例写自己的应用遇到外设操作不清楚的去drivers里查驱动接口。2.2 编译工程搭建你的开发环境需要哪些东西在Windows下开发ASR6505官方支持的IDE主要是Keil MDK以及GCC交叉编译环境。我这里只讲Keil的配置因为用它的人最多遇到问题也相对好排查。搭建环境前你需要准备这几样东西Keil MDK5建议用5.3以上版本老版本对ARM Compiler 6的支持不够好而SDK的示例工程默认用了AC6。ASR官方的芯片Pack支持包这个在Gitee仓库的tools目录下可以找到安装后Keil才能识别ASR6505这颗芯片。J-Link驱动用于下载和调试程序。目前SDK官方文档里用的调试器是J-Link不像ST芯片那样常用ST-Link。如果你手头只有ST-Link也能用但需要自己接线不太推荐在起步阶段折腾。环境装好之后打开SDK里的任一示例工程比如PingPong在Options for Target里检查一下芯片型号是否识别正确然后直接编译。如果环境没问题编译是能一次过的。如果卡住了百分之七八十都出在Pack没装对或者编译器版本太旧上。3. 驱动安装全攻略串口驱动和调试器驱动一个都不能少3.1 板载串口芯片识别CP2102和CH340的驱动安装ASR6505的开发板市面上常见的不管是官方评估板还是第三方做的核心板板载的USB转串口芯片大多用的是CP2102或者CH340。这两个芯片的驱动安装是新手最容易卡住的第一关。先说CP2102这是Silicon Labs芯科的芯片。把开发板通过USB线接到电脑后如果你打开设备管理器看到一个带着黄色感叹号的“USB Serial Port”或者干脆是未知设备说明驱动没装上。这时候直接去Silicon Labs官网搜“CP210x USB to UART Bridge VCP Drivers”下载对应的驱动安装包装完重启电脑设备管理器里就会出现一个“COMx”口。再说CH340这是南京沁恒的芯片。很多国产开发板喜欢用这颗因为便宜。CH340的驱动去沁恒官网下载中心就能找到安装更简单一路Next就行。装上之后同样会在设备管理器里出一个COM口。我自己的习惯是第一次拿到板子后先把USB线插上确认电脑识别到的是哪个COM口记下来并且把COM口的波特率改成和设备默认值一致。很多人在这一步就开始踩坑——设备管理器里明明有COM口但一打开串口助手就乱码或者没反应多半是波特率不对。ASR6505的SDK里的串口demo默认波特率通常是115200如果你用的串口助手默认9600那肯定对不上。注意CP2102和CH340的驱动不要同时混装有时候会冲突。我就遇到过一台电脑上装了CH340驱动之后CP2102的端口识别出问题的情况。不是不能共存的绝对冲突但为了省事建议按需安装。3.2 J-Link驱动的安装与配置下载烧录的关键程序编译好了怎么烧到板子里去ASR6505开发板板载的调试器多数是J-Link OB板载版也有部分第三方板子引出了SWD接口让你外接J-Link。不管哪种方式你都需要安装J-Link驱动。J-Link驱动去SEGGER官网下载。下载的时候要注意SEGGER官网会提供多个版本从V6.x到V7.x都有这里有一个非常重要的选择建议ASR6505这个芯片的内核是Cortex-M0用V6.80之后的版本都能支持但如果你的Keil版本比较老比如MDK 5.2x建议下载V6.80或者V6.81这个经典版本兼容性最好。最新的V7.x驱动在某些精简的第三方板子上反而可能连不上目标芯片。驱动安装算是全流程里相对顺利的一步但最容易出问题的是“驱动装好了但Keil里看不到J-Link设备”。遇到这种情况90%的原因是USB驱动被系统默认驱动接管了。解决办法很简单在设备管理器里找到J-Link设备右键更新驱动手动指定到“SEGGER”文件夹下的驱动目录强制装一遍SEGGER的驱动问题就解决了。驱动装好之后打开Keil的Options for Target - Debug在右边的下拉框里选择“J-LINK / J-TRACE Cortex”然后点击Settings如果能弹出J-Link的信息框并且能读出芯片ID那说明连接已经通了可以开始烧录了。4. 核心驱动代码解析从寄存器到底层封装LORA驱动的调用逻辑4.1 从LORA驱动接口到硬件操作RadioInit和RadioSleepSDK里的LORA驱动代码整体封装风格和Semtech官方的SX126x驱动非常接近这对之前用过SX1268或者SX1262的朋友来说是个好消息上手成本很低。核心的API集中在radio.h和radio.c这两个文件里。几个关键接口是这样用的Radio.Init(RadioEvents)这是LORA驱动的初始化入口传入一个事件回调结构体里面包含了TxDone、RxDone、TxTimeout、RxTimeout等回调函数的指针。驱动在进中断之后会根据事件类型回调这些函数。Radio.Sleep()让射频进入睡眠模式。这个接口在低功耗节点里非常关键正常待机时让射频睡眠电流可以做到很低。Radio.SetTxConfig(...)配置发送参数。需要传入调制方式、发射功率、频率、带宽、扩频因子、编码率、CRC开关等一堆参数。Radio.Send(payload, size)开始发送一帧数据。这接口是异步的数据发完之后会触发TxDone回调不会阻塞在这里等。Radio.SetRxConfig(...)配置接收参数。Radio.Rx(Timeout)启动接收等待数据到来。从这个接口结构能看到ASR6505的驱动已经是比较成熟的设计——事件回调驱动异步收发。写应用的时候主循环里不用轮询射频状态只需要在各回调函数里处理对应事件就行。4.2 参数配置的经验值频率、带宽、扩频因子、功率怎么选LORA通信的质量很大程度上取决于这几个关键参数的设置。这个坑我踩得很深最开始用默认参数通信距离怎么都拉不开。后来一步步调参数才找到问题。下面直接给出一组我在项目里验证过的配置以及调整逻辑。频率Frequency如果你在国内做470M510M的频段注意不要超过法规限制的发射功率。如果是自己做实验或者部署在非管制的868/915M频段那就按当地法规设置。注意一点ASR6505的频率计算寄存器是25kHz步进你在配置的时候传入的频点需要是高精度计算过的。带宽Bandwidth常用的是125kHz和250kHz。带宽越小灵敏度越高但传输速率也越慢。如果你想追求最远的通信距离用125kHz如果数据量稍大、对距离要求没那么极限可以用250kHz。500kHz带宽不怎么推荐在实际项目中感知不到明显优势反而更容易受干扰。扩频因子Spreading FactorSF7到SF12可选。SF越大接收灵敏度越高通信距离越远但空口时间成倍拉长有效数据速率下降。我的经验是固定的远距离点对点用SF10比较均衡如果是移动节点或者对功耗敏感用SF7到SF9之间做动态调整比较好。编码率Coding Rate4/5到4/8可选。默认4/5就行除非你信道环境特别差再考虑提高编码率来抗干扰。发射功率Tx PowerASR6505最高能到22dBm约150mW但这个功率档需要外部匹配电路配合。我在实际测试中20dBm和22dBm的差距在实际通信距离上并不大反而22dBm时电流明显上去了。所以如果是电池供电设备用20dBm更划算。把这些参数组合在一起我常用的一个远距离配置是频率470MHz、带宽125kHz、扩频因子SF10、编码率4/5、发射功率20dBm。在这个配置下空旷环境拉过5公里以上没压力。4.3 板载天线设计的关键点不画好天线通信距离直接腰斩提到LORA的硬件设计就不能不说天线。很多人在自制板子的时候图省事直接画个“L型”走线当天线或者把天线放在板边但不做净空处理结果距离怎么测都上不去。ASR6505的参考PCB设计里给了几种天线方案我建议新手直接抄官方的板载天线设计。板载天线设计有几个关键点我踩过坑之后总结如下首先天线下方的PCB要净空也就是天线投影区域的正反面都不能铺铜、不能走线。我见过很多新手画板子天线区域看起来是空出来了但反面没挖空结果天线效率极低。其次天线要走阻抗匹配433M/470M的板载天线通常要做阻抗匹配网络参考设计里在射频输出脚和天线之间放了一个π型匹配电路这个千万别省。最后天线要放在板边角尽可能远离地平面、屏蔽罩和电池让天线有足够的辐射空间。注意如果你画的天线是官方参考设计的Copy那记得把介质层的参数板厚、介电常数设置成和参考设计一致。我都遇到过同样的天线文件板子从0.8mm厚度换成1.6mm之后驻波明显变差的情况。打样之前最好让PCB厂帮忙做一下阻抗控制。5. 实操过程实录从编译到PingPong通信全流程5.1 一步步跑通PingPong示例PingPong示例是ASR6505 SDK里最简单的通信demo两个节点一个发送“Ping”另一个收到后回“Pong”。跑通这个demo你就基本掌握了这套开发环境的完整链路。具体操作步骤是这样的打开SDK里的PingPong工程确认Keil能正常编译。如果编译报了“Cannot open source file”之类的错检查一下工程头文件路径是否设置完整。把两个开发板都通过USB线连到电脑上确认两个COM口都正常识别。给两个板子分别烧录相同的程序PingPong的代码逻辑里会区分Node A和Node B通过一个宏定义或者跳线来选择。打开两个串口助手窗口分别连接两个COM口波特率设为115200。给两个板子供电观察串口输出。如果A板发出“Ping”B板收到后打印“Ping received”然后回复“Pong”A板再收到“Pong”那恭喜你完整的收发链路已经通了。我第一次跑这个demo的时候卡在了一个非常低级但很隐蔽的问题上板子供电电流不够。当时用的是开发板的USB口直接供电串口线也是USB转的结果一发射电流一上来电压跌落导致复位。后来换了独立供电才稳定下来。所以建议准备跑发射实验的时候不要吝啬供电用独立稳压电源或者大电流的USB口。5.2 通过逻辑分析仪验证射频启动时序如果你在调通PingPong之后还想更深入一点建议用逻辑分析仪看一下DIO1引脚和BUSY引脚的状态变化。ASR6505的射频部分和MCU之间通过SPI通信BUSY引脚用来指示射频是否空闲。驱动里每次操作SPI之前都会先等待BUSY拉低这个时序如果不对通信就会出现莫名其妙的问题。观察方法很简单把逻辑分析仪的通道1接DIO1通道2接BUSY然后触发一次发送。正常情况下你会看到BUSY高电平一段时间意思是射频正在处理上一个命令然后在射频进入发送状态后DIO1会在数据发送完成时产生一个上升沿中断。这个验证的意义在于当你的程序出现“数据发不出去”或者“接收不到数据”的问题时第一步不是去查应用层逻辑而是先确认射频芯片有没有正确地被驱动起来。如果BUSY一直拉高不释放大概率是SPI通信出问题了。如果DIO1一直没有电平变化可能是射频配置没生效。6. 常见问题与排查技巧速查表6.1 编译期和下载期的典型问题编译阶段最常见的问题有这几个问题一Keil编译报错“Error: L6211E: Ambiguous symbol”。这个大概率是你的工程里把多个示例文件都加进来了导致符号重复。我碰到这种情况通常是因为把PingPong和LoRaWAN的示例代码放在了同一个工程里编译器的符号冲突了。解决办法是新建一个干净的工程只添加用到的源文件。问题二Keil能编译但下载时提示“No target connected”。这个先排查J-Link有没有识别到目标芯片用J-Link Commander工具直接连一下。连不上就检查接线特别是SWDIO和SWCLK两根线是否接反。如果J-Link本身没问题有可能是目标板供电不足导致芯片没跑起来量一下核心电压。6.2 运行时通信问题的排查手段当程序烧进去之后通信各种异常这类问题排查难度更大。我整理了一个速查逻辑现象A板发数据B板收不到。先看B板串口有没有打印接收日志。如果B板没有打印说明射频没有进入接收状态或者收到的数据CRC校验失败。检查B板的收发频率和扩频因子是否和A板完全一致。现象A板发数据时电流飙高但距离很差。这种基本上都是天线匹配问题驻波比太高。有条件的话用矢网测一下天线阻抗没条件就换回官方参考设计试试。现象低功耗模式下电流降不下去。这个要多查两个地方一是射频睡眠之后GPIO有没有漏电二是MCU是否进了Stop模式。很多时候板子上电后默认的所有GPIO都是浮空输入这种状态下漏电路径会非常隐蔽。我把这几个排查思路整理成一张表方便你对照现象大概率原因排查方法编译报Ambiguous symbol工程文件重复添加新建工程只添加必要源文件下载时连不上芯片J-Link驱动或接线问题用J-Link Commander验证连接发送时电流异常高天线失配或输出功率设置过高检查匹配网络降低输出功率发送时电流异常低射频没真正启动SPI通信异常用逻辑分析仪测BUSY和DIO1时序接收端收不到数据频率/带宽/扩频因子不一致逐一核对射频参数配置低功耗模式电流降不下来GPIO漏电或MCU未真正睡眠检查GPIO和睡眠模式配置6.3 一个非常隐蔽的坑J-Link驱动版本和Keil的兼容性这个坑我想单独拿出来说因为它困扰了我整整两天。当时有一台新电脑装上最新的J-Link V7.92驱动Keil版本也是最新的MDK 5.38按道理说版本都很新不会有兼容问题。但奇怪的是工程一编译下载Keil就报“RDDI-DAP Error”百度搜了一大圈各种说法都有。后来发现是J-Link驱动V7.x和Keil MDK 5.36及以下版本的一个已知兼容性问题。解决的办法有两种一种是升级Keil到5.37以上版本另一种是换回J-Link V6.80版本驱动。我自己换回V6.80之后问题就消失了。所以如果你用的Keil版本比较稳定就没必要追着J-Link新版本升级有时候越新越折腾。7. 个人经验和最终建议7.1 把SDK吃透少走一半弯路ASR6505这套SDK由于是ASR在Semtech的驱动基础上扩展出来的代码风格保留了比较强的“原厂味”。最明显的特征就是大部分外设驱动都没有使用HAL库那样的抽象层次而是直接操作寄存器对新手来说阅读门槛略高但对于理解芯片的工作原理反而更有帮助。最开始我用这个芯片的时候也想过是不是要自己重新封装一套更“优雅”的驱动后来发现大可不必。官方驱动虽然细节上不够精致但稳定性是经过大量量产验证的。在项目初期尽量用官方驱动等业务逻辑稳定了再考虑优化这是比较理性的做法。7.2 资料整理与备份关键时刻能救命我再分享一个小习惯每次从Gitee拉取SDK之后我会把整个仓库包括子模块打包存一份到本地NAS和网盘里。因为Gitee上的仓库偶尔会有大版本更新更新后API可能会有变动旧工程的代码很可能编译不过。如果你手头有多个项目在用不同版本的SDK一定在工程里标注好使用的SDK版本号不然过了几个月你自己都分不清哪个工程对应哪个版本。另外ASR官方的设计参考文件里面有PCB工程的封装库做硬件设计的时候优先从官方封装库里面拷不要自己去画封装。ASR6505的引脚间距是0.5mm的QFN封装手工焊接难度不低如果封装画错一个引脚整个板子就废了。7.3 从驱动到量产还有哪些路要走驱动调通只是第一步后面的路还很长。如果你的项目要从样机走到量产以下几个方向是要提前考虑的一是量产测试方案。你不可能每块板子都用手工烧录人工测试得设计一套产测固件能自动完成射频参数的校准比如输出功率校准、频率偏差校准和功能测试。二是低功耗优化。ASR6505在深度睡眠模式下电流可以做到很低但前提是你把MCU内部的所有外设时钟都关掉GPIO电平状态处理好外部电路也要配套。这块优化下来才能让两节AA电池撑过一年。三是天线的认证测试。如果是做正式的产品天线性能需要做无源测试TRP/TIS和有源测试这些不是你拿个频谱仪随便量一下就能完事的得找有资质的实验室做。这些内容展开讲又是一大篇了。先把驱动跑起来把PingPong调通把射频参数吃透后面的路一步步走总会越来越顺的。本文还有配套的精品资源点击获取
返回列表