eefocus_4062187 发表于 2026-10-9 19:56:04

【瑞萨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]
查看完整版本: 【瑞萨BLE/WIFI模块测评】DA16200 WiFi 模块

Baidu
map