上个月从代理商那边拿到一块瑞萨的BLE/Wi-Fi模块型号是DA16600MOD这一类Wi-Fi加蓝牙的组合模块断断续续折腾了将近两周把开箱、环境搭建、AT指令调试、Wi-Fi联网、BLE广播抓包都过了一遍。写这篇测评的目的很直接给准备用瑞萨BLE/Wi-Fi模块做产品的同学一条能直接走通的路径顺便把那些手册里没写清楚、但实际调试必然踩到的坑都列出来。这篇东西适合两类人看一类是刚拿到模块、对着数据手册发呆的硬件工程师另一类是准备把瑞萨模块接入自己MCU项目、正在纠结开发工具链的嵌入式开发。我尽量把话讲直白涉及到具体命令和操作都会给全你跟着走一遍基本就能让模块跑起来。1. 开箱之后别急着上电先把硬件细节看明白1.1 包装内容与模块外观打开包装盒里面的东西比想象中简单一块核心模块、一根外置天线或者说PCB天线、一张快速入门卡片剩下就是一串跳线帽和说明页。模块本身尺寸很小大概一个拇指盖大小的长方形双排邮票孔封装正面能看到金属屏蔽罩侧边预留了天线焊接点和IPEX座子的位置。这里有个细节值得注意模块的丝印上会写具体型号和版本号比如DA16600MOD-A或DA16600MOD-B这两个版本在固件和蓝牙版本上有区别A版支持BLE 5.0/5.1B版有些是预烧了不同协议栈的。开箱后第一件事不是上电而是确认丝印版本因为你后面下载固件、查AT指令集文档时要用这个版本号去找对应资料版本对不上会出很多莫名其妙的问题。另外快速入门卡片上一般会印一个默认波特率常见的是115200但是有些批次可能是921600。我这次拿到的模块默认就是115200如果你不确定先按115200去试实在乱码再试其他波特率。这点看似不起眼实际后面串口调试的很多模块没反应都是波特率不对导致的不要一上来就怀疑模块坏了。1.2 双无线配置一个模块怎么同时搞定Wi-Fi和BLE瑞萨这套DA16600系列最有意思的地方是它的双无线架构。模块内部不是简单地把一个Wi-Fi芯片和一个蓝牙芯片封装在一起而是用了一个Cortex-M4作为主控Wi-Fi协议栈和BLE协议栈跑在同一个芯片的不同子系统里两个协议栈通过内部共享内存和消息队列通信。这种架构带来的实际好处有两个。第一Wi-Fi和BLE数据可以在模块内部直接互通比如手机通过BLE给模块下发配置模块再把配置内容通过Wi-Fi发到服务器整个链路不需要外部MCU参与对产品设计来说可以省掉一颗MCU。第二两个协议栈虽然是共存的但分工很明确Wi-Fi子系统负责802.11 b/g/n的物理层和MAC层BLE子系统负责广播、扫描和连接管理上层用户任务是共享的所以你能用同一组AT指令去控制两个无线协议。对很多从ESP32转过来的工程师来说这个思路其实是类似但不完全一样的。ESP32用的是双核架构两个核分别跑Wi-Fi和BLE协议栈DA16600是单核加双协议栈调度。使用上的差别体现在低功耗和内存占用上DA16600的休眠电流能压得很低适合电池供电的IoT设备这点在后面实测功耗时会具体说。1.3 引脚定义、天线净空区和供电习惯邮票孔封装的模块一般引脚不多DA16600MOD系列大致有这些关键引脚VIN主供电、3V3逻辑供电、GND、UART_TX、UART_RX、SWDIO、SWCLK、RESET还有一组SPI和GPIO。接线前把数据手册的引脚定义打印出来放在手边别凭记忆去接因为不同型号之间引脚位置会有细微差别。接线上有三个容易出问题的地方电源要干净。模块对供电纹波比较敏感直接用电脑USB口供电经常会出现Wi-Fi连接不稳定或者蓝牙广播间歇性消失的现象这不是模块坏了是电源噪声太大。建议用一个独立稳压源或者USB隔离方式供电至少保证纹波在50mV以内再讨论其他问题。天线区域要留净空。模块的天线焊接点周围一定范围内不能铺铜、不能走线否则天线阻抗会被破坏。你如果自己画底板参考手册里面的天线净空区示意图至少把天线那一侧的电路板边缘留出来。我见过不少产品天线离金属外壳太近蓝牙信号直接从30米掉到几米。复位和使能引脚不要悬空。有些引脚出厂默认有内部上拉但为了稳妥调试时把RESET引脚通过一个10k电阻上拉到VCC使能引脚根据手册要求接高或者接低不要放任悬空。悬空引脚在调试中会导致模块随机重启很难复现也很浪费时间。上电前最后检查一遍VIN和GND有没有接反确认好了再插电。模块上电后如果电源指示灯亮、电流在几十毫安左右波动基本说明硬件连接是正常的。2. 环境搭建之前的三个准备USB转串口、驱动和终端工具2.1 USB转TTL选型与接线模块调试第一件事是打通串口。你需要一个USB转TTL工具市面上常见的CH340、CP2102、FT232都行。要说区别日常调试用CH340够了如果后面要做功耗测量或者长时间稳定性测试建议用FT232它的驱动在Linux和Windows下都稳数据量大的时候不容易掉线。接线方法很简单USB转TTL的TX接模块的UART_RXRX接模块的UART_TXGND一定要共地VCC不用接模块单独供3.3V。这里特别提醒一下很多初学者按习惯把USB转TTL的VCC也接到模块的3V3如果两边电压不一致轻则无法通信重则烧掉模块所以串口线只接TX、RX、GND三条就够了。如果需要用模块的GPIO控制复位可以临时把USB转TTL的某个IO口通过三极管接到模块RESET但调试初期用物理按键复位更省事。2.2 驱动与设备管理器确认接好线后Windows下打开设备管理器确认USB转串口设备是否被识别端口号是多少比如COM3、COM5。如果你用的是CH340系统一般会自动装驱动不识别就手动装一下CH340的驱动。这里有一个很实用的小技巧属性里把串口的波特率初始化成和模块一样的115200然后点恢复默认按钮。这个操作不是必须的但可以减少一些终端软件打开时波特率不一致导致的乱码属于提前排除干扰项。Linux用户直接用ls /dev/ttyUSB*确认设备节点注意Ubuntu下一般有dialout权限问题需要把当前用户加到dialout组里不然打开串口会提示权限不足。2.3 终端软件参数配置终端工具我推荐三个SecureCRT、MobaXterm、putty。SecureCRT是老牌工具脚本支持好MobaXterm界面舒服、串口功能免费putty最轻量应急用方便。不要用Windows自带的超级终端功能太弱。打开串口后关键参数建议照下面这张表设置参数项推荐值说明波特率115200出厂默认具体按模块版本确认数据位8标准UART配置停止位1标准UART配置校验位None无校验流控禁用上电调试阶段不要开流控容易卡死换行符CRLFAT指令需要以回车换行结尾流控这里要单独说一句很多模块的串口默认是支持硬件流控的但出厂固件里大概率是关闭状态。如果你打开终端后设置成了RTS/CTS模块会等一个永远不会来的CTS信号结果就是屏幕上什么都没有。建议先禁用流控如果后面要用高速传输再按手册打开。3. 第一次上电启动日志、AT指令和固件确认3.1 上电时序与启动日志解读硬件接好、终端打开后按下模块复位键或者重新上电终端里应该能看到类似下面这样的启动日志DA16600 Module Bootloader v1.2.3 Firmware version: v2.5.0 Wi-Fi subsystem initialized BLE subsystem initialized Ready如果看到Ready说明模块已经正常启动基本环境OK。如果屏幕上什么都没有先检查波特率、TX/RX是否接反、共地是否做好这三点排掉百分之九十的无声问题。启动日志还能看出一个东西两个子系统是否都初始化成功。有时候Wi-Fi成功但BLE初始化失败日志里会打印错误码这种情况一般是模块天线没接好或者固件版本不匹配。最坑的是Wi-Fi和BLE的固件是分开烧录的模块出厂时两个固件版本不一致你看一个正常就以为没事实际另一个子系统根本没起来。3.2 AT指令集的基础验证方法模块启动后输入AT并回车正常情况下返回OK表示AT通道通畅。接下来按顺序跑一遍基础指令AT ATVERSION ATMAC ATBLEMACATVERSION返回的是固件版本ATMAC返回Wi-Fi的MAC地址ATBLEMAC返回蓝牙MAC地址。这几条指令能同时确认两个子系统都在工作。有个细节瑞萨的AT指令集和SIMCOM、移远那套风格不太一样指令前缀大多是AT但具体命令名要对照当前固件版本对应的AT指令手册。不同固件版本的指令名有小差异比如Wi-Fi连接指令在旧版是ATWIFI_CONNECT新版可能改成ATWJAP。最好的做法是下载模块对应版本的AT命令手册并把文档里基础命令那一章完整读一遍不用背但要知道有哪些类别后面查起来才快。一口气把所有AT都用一遍没有意义关键是建立几个基本认知Wi-Fi配置类命令、BLE配置类命令、数据收发类命令、状态查询类命令、固件升级类命令。能分清这五类后面遇到需求就知道该翻文档的哪一章。3.3 固件版本确认与升级前的准备基础AT验证通过后建议顺手升级固件到最新版本。瑞萨模块的固件升级一般通过专用的Flash烧录工具也可以用UART的XMODEM方式。升级前先备份当前固件版本号以防升级失败需要回退。升级过程有几个注意事项升级前确保供电稳定建议用稳压源而不是USB口变砖了烧录工具也救不回来的情况大多和供电有关。升级固件的核心流程是让模块进入Bootloader模式通常是拉高或拉低某个引脚再上电具体看手册。如果模块已经工作在AT模式部分版本支持ATFWUPDATE指令进入升级模式但不是每个版本都支持。升级过程中不要动串口、不要断开电源一旦Bootloader被破坏只能通过SWD接口用J-Link恢复麻烦程度翻倍。我个人的习惯是拿到模块后先跑一遍基础AT然后立刻升级固件再开始正式调试。原因是上游固件往往修了很多初期Bug如果你在旧固件上排查了半天最后发现是已知问题就很浪费时间。4. 开发工具链RASC、e2 studio和Keil怎么选4.1 三种开发路径的适用场景很多初次接触瑞萨模块的人会纠结到底用RASC还是Keil到底要不要学e2 studio其实这三个东西不是非此即彼的关系而是一条链路上的不同环节。RASC也就是瑞萨高级配置器作用是图形化配置MCU和模块的外设生成底层初始化代码。e2 studio是瑞萨的完整IDE内嵌了RASC插件可以直接在一个工程里完成配置、编译、烧录、调试。Keil则是很多嵌入式工程师更熟悉的工具瑞萨的RA系列和部分模块也支持Keil MDK但你仍然需要先用RASC生成代码再导入到Keil工程里编译。所以实际选择逻辑是如果项目是纯瑞萨MCU加模块直接用e2 studio流程最通顺。如果项目里其他芯片用的是Keil、IAR你只是把瑞萨模块当一个外设挂上去那就只装RASC用它生成外设初始化代码然后导入Keil。如果模块用AT指令方式工作外部MCU甚至可以不碰瑞萨的编译工具链你只需要懂串口发AT即可RASC都省了。这里要泼一盆冷水大部分IoT产品用模块时其实用不到瑞萨的IDEAT指令就够用了。只有当你要让MCU作为协处理器去直接跑模块的HOST协议栈时才需要去啃完整的e2 studio工程。项目刚开始不要太纠结工具链先想清楚你打算怎么控制这个模块。4.2 用RASC生成外设配置的实际流程如果决定用RASC流程大概是这样的先从瑞萨官网下载RASC对应版本安装后打开选择目标MCU型号比如EK-RA6M5评估板上的R7FA6M5AH然后进入FSP配置界面。界面里需要配置的核心外设就几个一个UART用于和模块通信、一个I2C或者SPI作为备用高速通道、若干个GPIO用于控制模块的复位和使能脚。在FSP的Pins配置界面里把UART的TX/RX引到对应的物理引脚设置好波特率生成代码。生成的代码结构很清晰hal_data目录下是底层驱动ra_gen目录里是FSP生成的初始化函数你只需要在用户代码区域写业务逻辑。这里有个细节RASC生成代码后R_SCI_UART_Open()这类函数名是固定的后面无论你换多少个MCU型号只要都是RA系列接口基本一致这对做多平台产品很有价值。如果你用的是KeilRASC生成代码时选择Keil MDK作为输出工具链它会把工程模板也带出来直接用Keil打开.uvprojx文件就能编译。这一步很多人卡住原因通常是RASC版本和Keil版本不匹配建议先用瑞萨官方文档里列出的对应版本组合不要全装最新版。4.3 e2 studio编译和烧录流程能进入编译阶段说明RASC配置已经OK。在e2 studio里选好工程目标按一下Build按钮第一次编译不会太慢因为FSP库是预编译的你改动的是应用层。烧录方式有两种一种是调试器烧录通过板载的J-Link OB接口直接烧录另一种是通过串口烧录用瑞萨的烧录工具配合串口下载。跑板子调试建议用前者因为你后面一定会用到断点调试尤其是排查串口通信问题时在UART发送函数上打断点看数据内容能直观看出模块有没有收到你的AT指令。编译过程中有一个常见报错链接器找不到某个FSP库函数。这种情况多半是你修改了FSP配置但没重新生成代码或者工程里有两个版本的FSP库冲突。解决办法是把生成目录完全删除一次重新走生成流程而不是在旧工程上补来补去。4.4 为什么很多产品最终回归AT指令模式说了这么多IDE相关的东西你可能要问那我到底该怎么用DA16600根据我接触过的产品案例绝大多数最终采用的是AT指令模式外部MCU或者直接接串口服务器把模块当成一个可对话的无线外设来用。原因很实在模块内部已经把Wi-Fi、BLE协议栈都实现了你再通过HOST模式控制它等于在应用处理器里跑一套完整的协议栈不仅开发周期长、内存压力大调试难度也高。而AT指令模式把协议栈的复杂度封装在模块里外部MCU只需要维护一个状态机、按需求下发AT并解析返回值这种方式对大多数传感器上报、远程控制、BLE配网场景来说完全够用。所以我给团队的建议是除非你需要极低延迟的实时数据通道、或者要复用Wi-Fi和BLE之间的内部数据流转能力否则直接用AT把省下来的时间花在业务逻辑和稳定性测试上。模块的价值在于帮你省掉射频开发的成本不在于又多一个让你写协议栈的平台。5. Wi-Fi和BLE的实用Demo从AT命令到真实数据流5.1 Wi-Fi连接并将数据上报到TCP服务器先跑一个最经典的场景模块连接路由器然后主动向PC上的TCP Server发送数据。开启路由器的2.4G AP记下SSID和密码在PC上启动一个TCP Server监听比如9000端口。然后在模块终端里依次输入ATWJAPMyWiFi,12345678 ATNCONPORT9000 ATNCONIP192.168.1.100 ATNCONS1 ATCIPSENDdemo message from DA16600ATWJAP是连接Wi-Fi热点格式为SSID和密码ATNCONPORT和ATNCONIP配置TCP服务器的端口和IPATNCONS1开启透传模式之后你输入的内容会直接发往服务器。PC端TCP Server收到demo message from DA16600就说明Wi-Fi链路通了。这里说一下TCP还是UDP的取舍简单数据上报用UDP就够了实时性要求高且协议简单如果要保证数据不丢失用TCP。但对IoT设备来说TCP长连接有个很现实的问题网络切换、休眠唤醒后连接容易断开你需要在应用层做重连机制不然设备几天后就成了离线状态。关于掉线重连实测下来最稳的做法是模块周期性连接Wi-Fi后主动探测TCP连接状态如果模块返回连接断开事件就重新执行一遍连接序列再回到透传。不要企图让模块自动维护TCP连接内置协议栈虽然会尝试重传但长时间无数据时运营商NAT会关闭映射你只有主动探测才能真正感知掉线。5.2 BLE广播与手机扫码实测再跑BLE广播场景。输入下面这组指令ATBLEINIT0 ATBLEGATTADDSVC0000FFF0-0000-1000-8000-00805F9B34FB ATBLEGATTADDCHAR0000FFF1-0000-1000-8000-00805F9B34FB,0x10 ATBLEADVSTARTDa16600_Demo,0x20第一条是初始化BLE协议栈第二条和第三条是添加一个自定义服务和一个自定义特征第四条是设置广播名并开启广播。手机端下载一个通用BLE调试助手刷新后应该能看到名为Da16600_Demo的设备。如果你用的是nRF Connect这个App连接后能看到我们添加的FFF0服务、FFF1特征读写特征都能操作。这个Demo虽然简单但验证了一个重要结论模块的BLE协议栈工作在从机模式时最大能承载20字节的单包写入超过会报错。这涉及BLE 4.2/5.0的MTU协商默认是23字节去掉3字节头就是20字节有效载荷想传大包必须重新协商MTU这在设计通信协议时很重要。很多人初次做BLE透传写了一个大字符串发现模块报错一脸懵其实不是模块坏了是MTU限制。需要发大数据的场景可以在外部MCU侧做分包和重组或者按手册调整BLE MTU参数到236这样单包能传183字节够用不少场合。5.3 用Wireshark抓指定BLE广播包的操作要点模块作为从机广播、手机作为主机扫描调试时经常需要抓包确认广播内容。瑞萨官方推荐的抓包方案是使用支持BLE Sniffer功能的USB Dongle配合Wireshark抓取空口数据。团队里如果只有普通蓝牙适配器可以和Android手机抓btsnoop log的替代方案配合使用不一定非得买专用抓包器。如果你使用专用抓包器配合Wireshark关心只抓指定BLE设备的话可以这样操作在Wireshark的过滤器栏输入btle.advertising_address aa:bb:cc:dd:ee:ff就能只看某个MAC地址的广播包。这个过滤器非常实用一个办公室里几十台BLE设备同时广播时没有这个过滤你根本找不到自己模块的广播包。Android手机抓log则是在开发者选项里打开蓝牙HCI日志开关之后连接设备的行为会被记录到/sdcard/Android/data/btsnoop_hci.log导出后用Wireshark打开同样能分析连接建立过程和特征读写时序。缺点是这个方法只能抓到本机参与的BLE交互抓不到其他设备的纯广播但配合专用Sniffer基本够用。我在实测中对比过两种方案结论是抓连接过程、查MTU协商失败时用手机btsnoop最方便不用额外硬件抓广播信道冲突、看周边设备占用的广播时隙时需要专用Sniffer加Wireshark过滤。建议两个都备着。6. 实测过程中的踩坑记录与排查思路6.1 串口乱码和中断先查电源再查接地调试第二周遇到一个很典型的Bug模块有时能回AT OK有时回一串乱码间隔几秒钟又正常。一开始怀疑波特率漂移换成921600也一样后来用示波器量模块VIN引脚发现供电电压在3.3V上下波动达到200mV以上串口波形也跟着抖动问题一下明确。原因是调试用的USB供电线太长压降和干扰叠加在一起模块在高负载时电压跌落导致UART电平不稳。换了一个短而粗的USB线或者直接用稳压源供电问题立竿见影。如果说有什么经验能分享遇到串口通信时好时坏、乱码时多时少先把示波器接到模块电源引脚上观察纹波不要一上来就怀疑固件或者模块硬件。排查顺序永远是电源、接线、电平、软件。6.2 固件升级失败后恢复的完整流程升级过程中手滑断电一次模块启动日志停在Bootloader阶段AT指令完全没有响应。这种情况下不用慌进入恢复流程第一步确认模块处于Bootloader模式很多版本需要拉高或拉低某个Boot引脚再上电按手册来。第二步打开瑞萨的Flash烧录工具选择对应的UART接口和波特率重新烧录Bootloader和完整固件镜像。第三步烧录完后重新上电确认启动日志恢复到正常的Ready状态。这里有一个容易忽略的恢复顺序问题必须先恢复Bootloader再烧应用固件顺序反了可能出现固件校验失败或者启动循环崩溃。我上次就是跳过Bootloader直接烧应用固件结果模块始终无法正常启动后来重新按Bootloader优先的顺序走一遍一分钟解决。所以下载固件包时注意看里面是否有单独的Bootloader文件。不要省这一步也别为了图方便合并烧录分开烧录虽然慢但安全得多。6.3 Wi-Fi连不上AP的几个隐蔽原因模块连接自己的热点路由器失败在排查排除密码错误后我按下面几条链路检查信道问题。模块只支持2.4G但路由器如果开启了5G优先或者自动信道选择模块扫描时可能在2.4G频段找不到目标热点。最直接的办法是把路由器的5G和2.4G分成两个不同的SSID强制模块连接2.4G那个。加密方式。部分老模块只支持WPA/WPA2不支持WPA3。如果你的路由器开了WPA3模式模块会连不上或者反复掉线。把这个兼容性问题排查掉后很多无法连接的问题会消失。路由器隐藏了SSID。模块通过AT指令连接时需要手动指定隐藏SSID参数否则无法扫描到。具体参数看AT指令手册里连接热点指令的最后一个字段。最后一点也值得一提模块连接路由器成功后RSSI值如果低于-70dBm不是模块的问题是天线位置的问题调整天线朝向比改软件参数更有效。6.4 BLE广播看不见或连不上的排查顺序BLE问题排查比Wi-Fi更讲究顺序因为涉及广播信道、扫描窗口、连接间隔等多个因素。我的排查顺序是这样的第一步确认广播已开启。用ATBLEADVSTATE?这类查询指令看广播状态而不是凭记忆确定自己发过开启命令。第二步用手机nRF Connect扫描如果在设备列表里看不到模块把手机贴近模块再扫描一次排除距离和天线问题。第三步如果能看到但连不上查看连接参数是否合适某些模块要求主机和从机的连接间隔匹配手机端可以用nRF Connect修改连接参数再试。关于很多人把HC05蓝牙模块的使用经验套到BLE上这件事要特别提醒HC05是经典蓝牙SPP模式手机连上后直接像串口一样收发数据BLE完全不同连接后要先发现服务、找到特征然后对特征读写。很多第一次用BLE模块的人看到设备列表里没有自己的模块或者连上之后找不到数据收发入口就开始怀疑模块坏了其实只是没有理解BLE的GATT服务模型。明确这个区别后BLE调试的入门门槛会降低不少。6.5 功耗实测中的注意事项最后提一下功耗测试。DA16600这种双无线模块在休眠状态下确实很省电但如果你直接用万用表串在电源线上测量会得到完全错误的结论因为模块在广播、接收、休眠三个状态之间切换电流变化是瞬态的。正确的做法是用示波器加电流探头或者用一个低阻采样电阻比如10毫欧串在供电回路上用差分探头测量采样电阻两端的电压变化再换算成电流曲线。没有电流探头的话也可以用带记录功能的电子负载或者电源仪表至少要能记录到峰值电流和平均电流。我实测的参考数据是模块在BLE广播状态下平均电流大概在几毫安到十几毫安之间进入休眠后能到微安级别而Wi-Fi连接状态下峰值电流能到两三百毫安。如果你产品用电池供电一定要在软件里设计好休眠策略否则电池续航会严重低于预期。这次测评从开箱到环境搭建再到无线功能实测整体走下来我最大的体会是瑞萨这套DA16600模块的硬件底子比较扎实AT指令集覆盖也够全真正的差距在文档的组织方式上。它的手册分散在多个PDF里指令名还会随固件版本变化如果你第一次接触很建议先去官网把所有相关文档一次性下载下来按启动配置、AT指令、固件升级、硬件设计指南四类归档调起来会顺手很多。最后再说一句实际的无论你最后选择e2 studio全链路开发还是AT指令快速集成第一步一定是先把串口调通、把AT基础指令跑顺毕竟后面的Wi-Fi配置和BLE调试都是建立在这条串口链路之上的。
阅读完成 · 觉得有帮助?