【瑞萨BLE/WIFI模块测评】DA16200 WiFi 模块
# 【瑞萨BLE/WIFI模块测评】DA16200 WiFi 模块本文介绍了瑞萨 DA16200 WiFi 模块的相关信息,包括外观参数、资源特点、原理图等,并搭建开发环境、结合 RA4M2-Eco 开发板实现 WiFi 功能测试。
## 介绍
DA16200 片上系统 (SoC) 是全球首款为一直在线的 Wi-Fi 物联网设备提供一年以上电池续航时间的 Wi-Fi SoC。 DA16200 是一款低功耗 Wi-Fi 网络 SoC,即使是持续连接 Wi-Fi 网络的设备,其电池寿命也能大大延长。 大多数应用中可实现一年以上的电池寿命。 SoC 的续航时间业界领先,所以无需在输出功率或续航方面有所权衡。 该点点taptap安卓还具有非常强大的物联网安全性,包括 WPA3 和 TLS,用于 Wi-Fi 和更高堆栈层的身份验证和加密。 DA16200 是完全卸载的器件,因此整个 Wi-Fi 和 TCP/IP 网络堆栈,甚至最终产品应用代码都可以在点点taptap安卓上运行,无需外部 CPU 或 MCU。 另外,小型廉价 MCU 也可以发送 DA16200 命令,而 SoC 仍将执行完整的卸载网络堆栈功能。
详见:(https://www.renesas.cn/zh/products/da16200) .
### 外观
Top view
!(//m.qjumbo.com/forum/data/attachment/forum/202610/09/195210nfocbohfup1pupec.jpg)
Bottom view
!(//m.qjumbo.com/forum/data/attachment/forum/202610/09/195221a2n24ooeaye2oe2t.jpg)
### 系统框图
!(//m.qjumbo.com/forum/data/attachment/forum/202610/09/195233rkzr22oszghhgfjr.jpg)
### 特点
- 802.11n 1x1
- 2.4 千兆赫 (GHz)
- 20MHz 信道
- 三种睡眠模式
- Wi-Fi 认证
- Arm® Cortex®-M4F 处理器
- SRAM
- 硬件加密引擎
- 集成 PA 和 LNA
- OTA 引擎
- 多个 I/O
- ADC 引擎
- 无主机或托管模式
### 模块
DA16200 全集成模块由 DA16200 SoC、4MB闪存、包括晶体振荡器在内的射频元件、射频集集滤波器,以及点点taptap安卓天线或外部天线连接器组成。
!(//m.qjumbo.com/forum/data/attachment/forum/202610/09/195249nsf4e4ydts3je3sz.jpg)
模块有37个引脚,包括GPIO、JTAG、RTC控制、UART、电源输入和32.768kHz晶体。
DA16200模块有两种天线选项:板载点点taptap安卓天线版本和外接天线连接器版本。
### 优势
- 低功耗 Wi-Fi
- 可为大多数应用提供一年以上的电池寿命
- 卓越的续航时间
- Wi-Fi 层的高安全性
- 上层堆栈的高安全性
- 即使持续连接 Wi-Fi,也可保持较长的电池续航时间
- 完全卸载,可在点点taptap安卓上运行整个堆栈
- 无需任何外部 CPU 或 MCU 即可运行
- 可与外部 MCU 一起运行(可选)
- 多种睡眠模式,适用于不同的应用
- 可以 SoC 或模块形式提供
- 在点点taptap安卓上处理模拟或数字传感器信息
详见:(https://www.renesas.cn/zh/products/da16200mod) .
### 原理图
模组
!(//m.qjumbo.com/forum/data/attachment/forum/202610/09/195350k3z87o9z7o8oz519.jpg)
外设
!(//m.qjumbo.com/forum/data/attachment/forum/202610/09/195406cdyyqqryr4rc00y3.jpg)
## 硬件连接
- 使用 J-LINK OB 连接 RA4M2-Eco 开发板的 SWD 调试接口;
- DA16200 模块连接 RA4M2-Eco 开发板的 PMOD2 接口;
!(//m.qjumbo.com/forum/data/attachment/forum/202610/09/195421b5sy8wlusg000j32.jpg)
详见:(https://oshwhub.com/jinleili/j-link-ob-gai-jin-ban) .
## 环境搭建
- 下载并安装 (https://www.renesas.cn/zh/software-tool/ra-flexible-software-package-fsp) ;
!(//m.qjumbo.com/forum/data/attachment/forum/202610/09/195436kkifpj8ooohoflkl.jpg)
## 工程测试
加载测试 DA16200 模块 WiFi例程。
### 工程配置
- 运行 e2 studio 软件,加载目标示例工程;
- 依次选择 `文件` - `从文件系统打开项目`,选择 RA4M2BLE 工程文件夹,导入;
- 双击 `configuration.xml` ,点击 Continue 更新至当前FSP版本;
- 在 Stacks 标签内,点击 UART 堆栈,配置相关属性,根据原理图可知,PMOD2 串口引脚对应 P410 (RXD0) 和 P411 (TXD0) ;
!(//m.qjumbo.com/forum/data/attachment/forum/202610/09/195452u4t46wk0xdz66dtk.jpg)
- 点击 `Generate Project Content` ,重新生成代码框架;
详见:[点点互娱官网入口 | RA MCU | RA生态社区](https://www.ramcu.cn/resource/list/) .
### 流程图
!(//m.qjumbo.com/forum/data/attachment/forum/202610/09/195508z4ii15wwhpthipi0.jpg)
### 代码
打开 `hal_entry.c` 文件,添加如下代码
```c++
#include "hal_data.h"
#include "wifi_transport.h"
#include <stdbool.h>
/*
* RAECO4M2 V2.0 + DA16200 first-stage bring-up.
*
* LED1: P405, active high.
* DA16200 UART: SCI0, P411/TXD0 -> module RXD,
* P410/RXD0 <- module TXD, 115200 8N1.
* DA16200 RESET: PMOD2 pin 8, P608, kept high (reset released).
*
* The application checks AT communication, scans nearby access points,
* connects to the configured hotspot, obtains an IP address, and verifies
* Internet access by pinging a public IP address.
*/
typedef enum e_diagnostic_reason
{
DIAGNOSTIC_REASON_NONE = 0,
DIAGNOSTIC_REASON_LED_PIN_CFG = 1,
DIAGNOSTIC_REASON_CPU_EXCEPTION = 2,
DIAGNOSTIC_REASON_WIFI_INIT = 3,
} diagnostic_reason_t;
#define APP_AT_RETRY_MS (2000U)
#define APP_ERROR_BLINK_MS (250U)
#define APP_SCAN_ERROR_BLINK_MS (750U)
#define APP_JOIN_ERROR_BLINK_MS (1200U)
#define APP_PING_ERROR_BLINK_MS (1600U)
volatile diagnostic_reason_t g_diagnostic_reason = DIAGNOSTIC_REASON_NONE;
volatile fsp_err_t g_diagnostic_error= FSP_SUCCESS;
volatile uint32_t g_fault_exception = 0U;
volatile uint32_t g_fault_cfsr = 0U;
volatile uint32_t g_fault_hfsr = 0U;
volatile uint32_t g_fault_dfsr = 0U;
volatile uint32_t g_fault_mmfar = 0U;
volatile uint32_t g_fault_bfar = 0U;
/* Application state intended for debugger inspection. */
volatile bool g_app_wifi_at_ok = false;
volatile uint32_t g_app_wifi_at_attempts = 0U;
volatile bool g_app_wifi_scan_done = false;
volatile bool g_app_wifi_scan_ok = false;
volatile uint32_t g_app_wifi_scan_attempts = 0U;
volatile bool g_app_wifi_join_done = false;
volatile bool g_app_wifi_join_ok = false;
volatile uint32_t g_app_wifi_join_attempts = 0U;
volatile bool g_app_wifi_ping_done = false;
volatile bool g_app_wifi_ping_ok = false;
volatile uint32_t g_app_wifi_ping_attempts = 0U;
void HardFault_Handler(void);
void MemManage_Handler(void);
void BusFault_Handler(void);
void UsageFault_Handler(void);
void SecureFault_Handler(void);
static void diagnostic_stop(diagnostic_reason_t reason, fsp_err_t error)
{
g_diagnostic_reason = reason;
g_diagnostic_error= error;
if (0U != (CoreDebug->DHCSR & CoreDebug_DHCSR_C_DEBUGEN_Msk))
{
__BKPT(0);
}
while (1)
{
__NOP();
}
}
static void cpu_exception_stop(void)
{
g_fault_exception = SCB->ICSR & SCB_ICSR_VECTACTIVE_Msk;
g_fault_cfsr = SCB->CFSR;
g_fault_hfsr = SCB->HFSR;
g_fault_dfsr = SCB->DFSR;
g_fault_mmfar = SCB->MMFAR;
g_fault_bfar = SCB->BFAR;
diagnostic_stop(DIAGNOSTIC_REASON_CPU_EXCEPTION, FSP_ERR_ASSERTION);
}
void HardFault_Handler(void)
{
cpu_exception_stop();
}
void MemManage_Handler(void)
{
cpu_exception_stop();
}
void BusFault_Handler(void)
{
cpu_exception_stop();
}
void UsageFault_Handler(void)
{
cpu_exception_stop();
}
void SecureFault_Handler(void)
{
cpu_exception_stop();
}
void hal_entry(void)
{
fsp_err_t err;
bool led_level = false;
uint32_tled_elapsed_ms= 0U;
uint32_tretry_elapsed_ms = APP_AT_RETRY_MS;
/* IOPORT is opened by R_BSP_WarmStart() before main() is called. */
err = R_IOPORT_PinCfg(&g_ioport_ctrl,
BSP_IO_PORT_04_PIN_05,
IOPORT_CFG_PORT_DIRECTION_OUTPUT | IOPORT_CFG_PORT_OUTPUT_LOW);
if (FSP_SUCCESS != err)
{
diagnostic_stop(DIAGNOSTIC_REASON_LED_PIN_CFG, err);
}
err = wifi_transport_init();
if (FSP_SUCCESS != err)
{
diagnostic_stop(DIAGNOSTIC_REASON_WIFI_INIT, err);
}
while (1)
{
if (!g_app_wifi_at_ok && (retry_elapsed_ms >= APP_AT_RETRY_MS))
{
retry_elapsed_ms = 0U;
g_app_wifi_at_attempts++;
g_app_wifi_at_ok = wifi_transport_test();
}
if (g_app_wifi_at_ok && !g_app_wifi_scan_done)
{
g_app_wifi_scan_attempts++;
g_app_wifi_scan_ok = wifi_transport_scan();
g_app_wifi_scan_done = true;
}
if (g_app_wifi_scan_ok && !g_app_wifi_join_done)
{
g_app_wifi_join_attempts++;
g_app_wifi_join_ok = wifi_transport_join();
g_app_wifi_join_done = true;
}
if (g_app_wifi_join_ok && !g_app_wifi_ping_done)
{
g_app_wifi_ping_attempts++;
g_app_wifi_ping_ok = wifi_transport_ping();
g_app_wifi_ping_done = true;
}
if (g_app_wifi_ping_ok)
{
led_level = true;
}
else
{
if (!g_app_wifi_at_ok)
{
retry_elapsed_ms++;
}
led_elapsed_ms++;
uint32_t blink_period_ms = APP_ERROR_BLINK_MS;
if (g_app_wifi_join_ok)
{
blink_period_ms = APP_PING_ERROR_BLINK_MS;
}
else if (g_app_wifi_scan_ok)
{
blink_period_ms = APP_JOIN_ERROR_BLINK_MS;
}
else if (g_app_wifi_at_ok)
{
blink_period_ms = APP_SCAN_ERROR_BLINK_MS;
}
if (led_elapsed_ms >= blink_period_ms)
{
led_elapsed_ms = 0U;
led_level = !led_level;
}
}
(void) R_IOPORT_PinWrite(&g_ioport_ctrl,
BSP_IO_PORT_04_PIN_05,
led_level ? BSP_IO_LEVEL_HIGH : BSP_IO_LEVEL_LOW);
R_BSP_SoftwareDelay(1U, BSP_DELAY_UNITS_MILLISECONDS);
}
}
```
打开 `wifi_config.h` 配置局域网参数;
```c++
#ifndef WIFI_CONFIG_H
#define WIFI_CONFIG_H
/*
* Replace these two strings with the 2.4 GHz Wi-Fi hotspot used for testing.
* Do not commit or publish a real password.
*/
#define WIFI_TEST_SSID "YOUR_WIFI_SSID"
#define WIFI_TEST_PASSWORD "YOUR_WIFI_PASSWORD"
#endif
```
保存代码。
### 构建工程
- 右键工程文件夹,点击构建项目(或点击工具栏小锤子按钮);
!(//m.qjumbo.com/forum/data/attachment/forum/202610/09/195532befhkoomnzifwhu7.jpg)
### 调试上传
右键工程文件夹 - 调试/运行项目 - 上传固件至开发板(或点击工具栏小虫子按钮,进入 Debug 模式并运行)。
!(//m.qjumbo.com/forum/data/attachment/forum/202610/09/195546vi1xta3bo2x3oobb.jpg)
### 效果演示
进入 WiFi 路由器管理页面,可获取 DA16200 模块 IP 地址等信息。
!(//m.qjumbo.com/forum/data/attachment/forum/202610/09/195601ml5omhah3a44qlhq.jpg)
## 总结
本文介绍了瑞萨 DA16200 WiFi 模块的相关信息,包括外观参数、资源特点、原理图等,并搭建开发环境、结合 RA4M2-Eco 开发板实现 WiFi 功能测试,为相关产品的快速开发和应用设计提供了参考。
页:
[1]