1、瑞昱 RTL8710 主要特点

• 802.11 b/g/n ,CMOS MAC,物理层基带
• 内置低功耗 32 位 CPU:可以兼作应用处理器
• 内置 TCP/IP 协议栈
• 内置 TR 开关、balun、LNA、功率放大器和匹配网络
• 内置 PLL、稳压器和电源管理组件
• MO、2x1 MIMO
• A-MPDU 、A-MSDU 的聚合和 0.4 s 的保护间隔
• WiFi @ 2.4 GHz,支持 WPA/WPA2 安全模式
• 支持 STA/AP/STA AP 工作模式
• 支持 Smart Config 功能(包括 Android 和 iOS 设备)
• HSPI 、UART、I2C、I2S、IR Remote Control、PWM、GPIO
• 深度睡眠保持电流为 10 uA,关断电流小于 5 uA
• 2 ms 之内唤醒、连接并传递数据包
• 802.11b 模式下 20 dBm 的输出功率
• 待机状态消耗功率小于1.0 mW (DTIM3)
• 工作温度范围: -40℃ - 130℃

瑞昱 RTL8710 作为一款完整的 WiFi 解决方案,能够独立运行,也可以作为从机搭载于其他主机 MCU 运行。

它内置了一颗主频为主 166 MHz,并可兼做应用处理的超低功耗 32 位微型 CPU。

在搭载应用并作为设备中唯⼀的应⽤处理器时,能够直接从外接闪存中启动。内置的高速缓冲存储器有利于提高系统性能,并减少内存需求。

RTL8710 在负责无线上网接入承担 WiFi 适配器的任务时,可以将其添加到任何基于微控制器的设计中,连接简单易行,只需通过 SPI/SDIO 接口或 I2C/UART 口即可。

强大的片上处理和存储能⼒,使其可通过 GPIO 口集成传感器及其他应用的特定设备,实现了最低前期的开发和运行中最少地占用系统资源。

瑞昱 RTL8710 CPU主频为 166MHz ,并采用 QFN-48(6x6mm)封装工艺,同时拥有 42K 的可用内存。

瑞昱 RTL8710 通过内置 1MB flash,不仅尺寸小,还可帮助开发者降低开发成本。

瑞昱 RTL8710 GPIO 最大 21 个管脚,同时 I2C 最大值有 3 个,最多 2 个 PCM,以及多达 4 个 PWM,并支持 2 个高速 UART,1 个低速 UART。

数据吞吐量方面,在 802.11n 网络模式下,瑞昱 RTL8710 的最大数率为 150Mbps。

在市场应用方面,瑞昱RTL8710可运用于智能家居、家庭⾃动化、⼯业⽆线控制、传感器网络、可穿戴电子产品、无线位置感知设备、安全 ID 标签、无线定位系统信号等。

通过测试发现,瑞昱 RTL8710 芯片不仅稳定、丢包率也低的超乎我们的想象,同时使用瑞昱 RTL8710 路由器的兼容性和网络连接的稳定性也令人满意。

在数据安全性上,瑞昱 RTL8710 的安全性更高, 并且支持 MD5,SHA-1/2,HMAC-MD5,HMAC-SHA1,HMAC-SHA2 等多种认证算法。

详细信息参考:

RTL8710 基础浅析

RTL8710 基础资源

2、AT 指令联网

设置 AP 和密码:

ATW3=SSID
ATW4=passwd
ATW5=cannel
ATWB          (Start STA+AP)

然后连接网络:

ATW0=SSID     (连接的id)
ATW1=12345678 (连接的密码)
ATW2=         (这一项可不用)
ATWC          (Join a network)

ping 网络:

ATWI=168.254.0.101

3、代码实现读取温度值

业务逻辑:

void main(void)
{gpio_t gpio_led;int led_status;int i2clocalcnt;int error;uint8_t userRegister;           //variable for user registerint endOfBattery;           //variable for end of batteryuint8_t sht2x_serialnumber[8];float temperature = 1.123f;float humidity = 2.456f;DBG_8195A("sleep 10 sec. to wait for UART console\n");Mdelay(10000);DBG_8195A("start i2c example - SHT2x\n");error = SHT2x_Init(sht2x_serialnumber);if ( error == NO_ERROR ) {DiagPrintf("SHT2x init ok, Serial Number = 0x %02x %02x %02x %02x %02x %02x %02x %02x\r\n", sht2x_serialnumber[7],sht2x_serialnumber[6],sht2x_serialnumber[5],sht2x_serialnumber[4],sht2x_serialnumber[3],sht2x_serialnumber[2],sht2x_serialnumber[1],sht2x_serialnumber[0]);} else {DiagPrintf("SHT2x init FAILED! \r\n");for(;;);}while(1){error |= SHT2x_GetTempAndHumi(&temperature, &humidity);// --- check end of battery status (eob)---// note: a RH / Temp. measurement must be executed to update the status of eoberror |= SHT2x_ReadUserRegister(&userRegister);  //get actual user regif( (userRegister & SHT2x_EOB_MASK) == SHT2x_EOB_ON ) endOfBattery = true;else endOfBattery = false;rtl_printf("temp=%f, humidity=%f, error=%d\n", temperature, humidity, error);Mdelay(1000);}
}

基础代码:

#include "device.h"
#include "PinNames.h"#include "basic_types.h"
#include "diag.h"
#include "osdep_api.h"#include "i2c_api.h"
#include "pinmap.h"
#include "rtl_lib.h"
#include <stdbool.h>#define NO_ERROR            0x00
#define ACK_ERROR           0x01
#define CHECKSUM_ERROR      0x02
#define NULL_ERROR          0x03#define MBED_I2C_MTR_SDA    PC_4
#define MBED_I2C_MTR_SCL    PC_5#define MBED_I2C_SLAVE_ADDR0    0x40
#define POLYNOMIAL 0x131 // P(x) = x^8 + x^5 + x^4 + 1 = 100110001#define MBED_I2C_BUS_CLK        100000  //hz
#define I2C_DATA_MAX_LENGTH     16uint8_t i2cdata_write[I2C_DATA_MAX_LENGTH];
uint8_t i2cdata_read[I2C_DATA_MAX_LENGTH];
int i2cdata_read_pos;volatile i2c_t   i2cmaster;// Sensor Commands
typedef enum{TRIG_T_MEASUREMENT_HM    = 0xE3, // command trig. temp meas. hold masterTRIG_RH_MEASUREMENT_HM   = 0xE5, // command trig. humidity meas. hold masterTRIG_T_MEASUREMENT_POLL  = 0xF3, // command trig. temp meas. no hold masterTRIG_RH_MEASUREMENT_POLL = 0xF5, // command trig. humidity meas. no hold masterUSER_REG_W               = 0xE6, // command writing user registerUSER_REG_R               = 0xE7, // command reading user registerSOFT_RESET               = 0xFE, // command soft resetSerialNumber_location_1  = 0xFA0F,SerialNumber_location_2  = 0xFCC9
}etSHT2xCommand;typedef enum {SHT2x_RES_12_14BIT       = 0x00, // RH=12bit, T=14bitSHT2x_RES_8_12BIT        = 0x01, // RH= 8bit, T=12bitSHT2x_RES_10_13BIT       = 0x80, // RH=10bit, T=13bitSHT2x_RES_11_11BIT       = 0x81, // RH=11bit, T=11bitSHT2x_RES_MASK           = 0x81  // Mask for res. bits (7,0) in user reg.
} etSHT2xResolution;typedef enum {SHT2x_EOB_ON             = 0x40, // end of batterySHT2x_EOB_MASK           = 0x40, // Mask for EOB bit(6) in user reg.
} etSHT2xEob;static int SHT2x_GetSerialNumber(uint8_t u8SerialNumber[]);
static int SHT2x_WriteCommand8(uint8_t cmd);
static int SHT2x_WriteCommand16(uint16_t cmd);
static int SHT2x_CheckCrc(uint8_t data[], uint8_t nbrOfBytes, uint8_t checksum);
static float SHT2x_CalcTemperature(uint16_t rawValue);
static float SHT2x_CalcHumidity(uint16_t rawValue);
int SHT2x_ReadUserRegister(uint8_t *pRegisterValue);
int SHT2x_WriteUserRegister(uint8_t *pRegisterValue);int SHT2x_Init(uint8_t u8SerialNumber[])
{uint8_t userRegister;           //variable for user registerint error = NO_ERROR;DiagPrintf("SHT2x_Init \r\n");i2c_init((i2c_t*)&i2cmaster, MBED_I2C_MTR_SDA ,MBED_I2C_MTR_SCL);i2c_frequency((i2c_t*)&i2cmaster,MBED_I2C_BUS_CLK);if (u8SerialNumber == NULL ) return NULL_ERROR;// --- Reset sensor by command ---error |= SHT2x_SoftReset();// --- Read the sensors serial number (64bit) ---error |= SHT2x_GetSerialNumber(u8SerialNumber);// --- Set Resolution e.g. RH 10bit, Temp 13bit ---error |= SHT2x_ReadUserRegister(&userRegister);  //get actual user reguserRegister = (userRegister & ~SHT2x_RES_MASK) | SHT2x_RES_10_13BIT;error |= SHT2x_WriteUserRegister(&userRegister); //write changed user regreturn error;
}static int SHT2x_GetSerialNumber(uint8_t u8SerialNumber[])
{int error = NO_ERROR;SHT2x_WriteCommand16(SerialNumber_location_1);  if (i2c_read((i2c_t*)&i2cmaster, MBED_I2C_SLAVE_ADDR0, (char*)&i2cdata_read[0], 8, 1) != 8)error |= NULL_ERROR;u8SerialNumber[5] = i2cdata_read[0];//SNB_3u8SerialNumber[4] = i2cdata_read[2];//SNB_2u8SerialNumber[3] = i2cdata_read[4];//SNB_1u8SerialNumber[2] = i2cdata_read[6];//SNB_0SHT2x_WriteCommand16(SerialNumber_location_2);  if (i2c_read((i2c_t*)&i2cmaster, MBED_I2C_SLAVE_ADDR0, (char*)&i2cdata_read[0], 6, 1) != 6)error |= NULL_ERROR;u8SerialNumber[1] = i2cdata_read[0];//SNC_1u8SerialNumber[0] = i2cdata_read[1];//SNC_0u8SerialNumber[7] = i2cdata_read[3];//SNA_1u8SerialNumber[6] = i2cdata_read[4];//SNA_0return error;
}static int SHT2x_CheckCrc(uint8_t data[], uint8_t nbrOfBytes, uint8_t checksum)
{uint8_t crc = 0;    uint8_t byteCtr;int error = NO_ERROR;//calculates 8-Bit checksum with given polynomialfor (byteCtr = 0; byteCtr < nbrOfBytes; ++byteCtr){ crc ^= (data[byteCtr]);for (uint8_t bit = 8; bit > 0; --bit){ if (crc & 0x80) crc = (crc << 1) ^ POLYNOMIAL;else crc = (crc << 1);}}if (crc != checksum) error |= CHECKSUM_ERROR;return error;
}//===========================================================================
int SHT2x_SoftReset()
//===========================================================================
{int error = NO_ERROR;SHT2x_WriteCommand8(SOFT_RESET);  Mdelay(15); // wait till sensor has restartedreturn error;
}//===========================================================================
int SHT2x_ReadUserRegister(uint8_t *pRegisterValue)
//===========================================================================
{int error = NO_ERROR;SHT2x_WriteCommand8(USER_REG_R);if (i2c_read((i2c_t*)&i2cmaster, MBED_I2C_SLAVE_ADDR0, (char*)&i2cdata_read[0], 2, 1) != 2)error |= NULL_ERROR;error |= SHT2x_CheckCrc (i2cdata_read,1,i2cdata_read[1]);return error;
}//===========================================================================
int SHT2x_WriteUserRegister(uint8_t *pRegisterValue)
//===========================================================================
{int error = NO_ERROR;SHT2x_WriteCommand8(USER_REG_W);if (i2c_write((i2c_t*)&i2cmaster, MBED_I2C_SLAVE_ADDR0, (char*)pRegisterValue, 1, 1) != 1)error |= NULL_ERROR;return error;
}static int SHT2x_WriteCommand8(uint8_t cmd)
{int error = NO_ERROR;i2cdata_write[0] = (uint8_t)(cmd&0xFF);if (i2c_write((i2c_t*)&i2cmaster, MBED_I2C_SLAVE_ADDR0, &i2cdata_write[0], 1, 0) != 1)error |= NULL_ERROR;return error;
}static int SHT2x_WriteCommand16(uint16_t cmd)
{int error = NO_ERROR;i2cdata_write[0] = (uint8_t)(cmd >>8);i2cdata_write[1] = (uint8_t)(cmd&0xFF);if (i2c_write((i2c_t*)&i2cmaster, MBED_I2C_SLAVE_ADDR0, &i2cdata_write[0], 2, 0) != 2)error |= NULL_ERROR;return error;
}static float SHT2x_CalcTemperature(uint16_t rawValue)
{rawValue &= ~0x0003;           // clear bits [1..0] (status bits)return -46.85 + 175.72/65536 *(float)rawValue; //T= -46.85 + 175.72 * ST/2^16
}static float SHT2x_CalcHumidity(uint16_t rawValue)
{rawValue &= ~0x0003;          // clear bits [1..0] (status bits)return -6.0 + 125.0/65536 * (float)rawValue; // RH= -6 + 125 * SRH/2^16
}int SHT2x_GetTempAndHumi(float *temp, float *humi)
{int error = NO_ERROR;uint16_t rawValueTemp;uint16_t rawValueHumi;SHT2x_WriteCommand8(TRIG_T_MEASUREMENT_HM);  //-- read two data bytes and one checksum byte --if (i2c_read((i2c_t*)&i2cmaster, MBED_I2C_SLAVE_ADDR0, (char*)&i2cdata_read[0], 3, 1) != 3)error |= NULL_ERROR;//-- verify checksum --error |= SHT2x_CheckCrc (i2cdata_read,2,i2cdata_read[2]);rawValueTemp = i2cdata_read[0] << 8 | i2cdata_read[1];SHT2x_WriteCommand8(TRIG_RH_MEASUREMENT_HM);  //-- read two data bytes and one checksum byte --if (i2c_read((i2c_t*)&i2cmaster, MBED_I2C_SLAVE_ADDR0, (char*)&i2cdata_read[0], 3, 1) != 3)error |= NULL_ERROR;//-- verify checksum --error |= SHT2x_CheckCrc (i2cdata_read,2,i2cdata_read[2]);rawValueHumi = i2cdata_read[0] << 8 | i2cdata_read[1];//diag_printf("raw temp=0x%x, raw humidity=0x%x, error=%d\n", //          rawValueTemp, rawValueHumi, error);//-- calculate humidity and temperature --if ( error == NO_ERROR ) {*temp = SHT2x_CalcTemperature(rawValueTemp);*humi = SHT2x_CalcHumidity(rawValueHumi);}return error;
}

【IoT】联网 WIFI 设计之瑞昱 RTL8710 使用基础相关推荐

  1. 【IoT】产品 WIFI 选型:瑞昱 RTL8710 与乐鑫 ESP8266 对比

    在物联网 WIFI 应用领域,受限于成本及功耗,很多诸如智能空调.智能豆浆机等智能硬件产品上集成的 WIFI,都是以集成 WIFI 的单芯片 SoC 来实现,将通信协议 TCP/IP 写入 MCU 的 ...

  2. 瑞昱RTL8710对标乐鑫ESP8266 谁将成为物联网首选-新版

    **瑞昱RTL8710对标乐鑫ESP8266 谁将成为物联网首选 一,乐鑫ESP8266 3 二,瑞昱RTL8710 4 三,瑞昱RTL8710与乐鑫ESP8266主要参数对比 5 3.1,性能上对比 ...

  3. 瑞昱RTL8710对标乐鑫ESP8266 谁将成为物联网首选

    瑞昱RTL8710对标乐鑫ESP8266 谁将成为物联网首选 一,乐鑫ESP8266.......................................................... ...

  4. 瑞昱 RTL8710 与乐鑫 ESP8266 对比

    在物联网 WIFI 应用领域,受限于成本及功耗,很多诸如智能空调.智能豆浆机等智能硬件产品上集成的 WIFI,都是以集成 WIFI 的单芯片 SoC 来实现,将通信协议 TCP/IP 写入 MCU 的 ...

  5. 瑞昱RTL8710、乐鑫ESP8266 物联网之争

    据相关统计数据表明,2015年时,物联网WiFi芯片需求的总出货量突破3000万颗,是2014年物联网WiFi芯片出货量仅有1000万颗左右的三倍,同时伴随着智能硬件产业的发展壮大以及物联网产品的实实 ...

  6. 《初次使用瑞昱 rtl8710 》

    初步使用rtl8710 首次接触RTL8710 这一款模块,模块硬件可以在官网等方式找资料 环境搭建 硬件工具: USB线(正常的安卓手机线都可以) 开发板一块 J-link在线仿真器(某宝一大堆) ...

  7. 【IoT】WiFi 模组主流供应商

    1.芯片 WiFi 芯片厂家 瑞昱 RTL8710.乐鑫 ESP8266.德州仪器 TI cc3200.联发科 MT7681.高通 QCA4004. 2.模组 1)WIFI 主要特性 WIFI 通讯频 ...

  8. 免驱无线网卡插到电脑上突然驱动变成瑞昱网卡了无法正常联网

    环境: 电脑:戴尔台式主机 系统:Windows 10 专业版 64位 网卡:S星UD6H(免驱版)高增益650M双频无线USB网卡 硬件版本:V2 问题描述: S星免驱无线网卡插到电脑上突然驱动变成 ...

  9. CS5212替代RTD2166瑞昱DP转VGA方案中文设计

    CS5212中文设计方案,替代瑞昱RTD2166,pin对pin替代RTD2166,且外围器件少,设计简洁,版框尺寸小,整体方案成本更低. CS5212适用于多个细分市场和显示器应用程序,如笔记本电脑 ...

最新文章

  1. 2021清华大学年度人物候选 | 曹丰泽:我要证明,理想主义的路是走得通的
  2. Execute Process Task
  3. 后端技术:MyBatis 批量插入的 3 种写法
  4. 淘淘商城之技术选型、开发工具和环境、人员配置
  5. c# list集合根据某个字段去重_Python list、dataframe去重
  6. 中国双侧人工耳蜗行业市场供需与战略研究报告
  7. 在Angularjs中使用directive自定义指令实现attribute的继承
  8. 本地计算机上的mysql57_win10出现本地计算机上的MySQL57服务启动后停止
  9. vb6,sql与access 获取当前日期
  10. class文件与dex文件解析
  11. 一个简单的搜狗微信公众号案例
  12. 【MPI编程】矩阵向量乘法--解法二(高性能计算)
  13. Android 屏蔽锁屏界面上的通知显示
  14. MacM1-Miniconda相关合集
  15. 2021消防设施操作员(初级)岗位考试模拟题库应急疏散逃生知识部分
  16. 离线分析:Flume+Kafka+HBase+Hadoop通话数据统计
  17. C3D复现出现的问题及其解决方法
  18. saber 2016打不开帮助文档
  19. POJ2965 The Pilots Brothers‘ refrigerator
  20. 稻城亚丁,从你的全世界路过

热门文章

  1. CentOS 7 安装 net-tools(解决无 ifconfig)
  2. Docker初安装与使用
  3. 如何使用@JsonFormat
  4. 时间格式Y M D S W 的大小写,和字母含义
  5. css dhtml动态网页教程,CSS/JSS DHTML动态网页制作
  6. 红色地带计算机病毒,徐州路口出现红色地带!经过这些地方千万要注意
  7. 高考成绩可以查询了,用Python爬取数据:看看哪些学校专业更受宠
  8. 迷你图+创建数据图表
  9. java上传超大文件解决方案
  10. 电商购物车产品在做什么?