diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index 2453978..493971c 100755 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -1,6 +1,8 @@ const { description } = require('../../package') const { name } = require('../../package') +const { getSidebarByCategory } = require('./sidebar') + module.exports = { /** * Ref:https://v1.vuepress.vuejs.org/config/#title @@ -88,15 +90,24 @@ module.exports = { sidebar: { '/doc/': [ { - title: '文档', - collapsable: false, - children: [ - '', - 'intro', - 'kernel', - 'appdev', - 'api', - ] + title: '简介', + children: getSidebarByCategory('intro','en') + }, + { + title: '内核', + children: getSidebarByCategory('kernel','en') + }, + { + title: '硬件支持', + children: getSidebarByCategory('framework','en') + }, + { + title: '通信协议', + children: getSidebarByCategory('communication','en') + }, + { + title: '传感器', + children: getSidebarByCategory('sensor','en') } ], } diff --git a/docs/.vuepress/enhanceApp.js b/docs/.vuepress/enhanceApp.js index 8452a86..58763d8 100755 --- a/docs/.vuepress/enhanceApp.js +++ b/docs/.vuepress/enhanceApp.js @@ -3,6 +3,8 @@ * * https://v1.vuepress.vuejs.org/guide/basic-config.html#app-level-enhancements */ +import Element from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' export default ({ Vue, // the version of Vue being used in the VuePress app @@ -11,4 +13,5 @@ export default ({ siteData // site metadata }) => { // ...apply enhancements for the site. + Vue.use(Element) } diff --git a/docs/.vuepress/sidebar.js b/docs/.vuepress/sidebar.js new file mode 100755 index 0000000..dd32f88 --- /dev/null +++ b/docs/.vuepress/sidebar.js @@ -0,0 +1,61 @@ +const sidebar = { + 'intro': [ + '/doc/intro', + '/doc/constructenv/bianyi', + '/doc/constructenv/debug', + '/doc/constructenv/goujian' + ], + 'kernel': [ + '/doc/kernel/mm', + '/doc/kernel/task', + '/doc/kernel/synchron', + '/doc/kernel/threadcommunication' + ], + 'framework': [ + '/doc/hwsupport/aiit-arm32', + '/doc/hwsupport/stm32f407-st-discovery', + '/doc/hwsupport/stm32f407zgt6', + '/doc/hwsupport/hifive1-rev', + '/doc/hwsupport/maxgo', + '/doc/hwsupport/kd233' + ], + 'communication': [ + '/doc/communication/4G', + '/doc/communication/5G', + '/doc/communication/at', + '/doc/communication/Bluetooth', + '/doc/communication/CAN', + '/doc/communication/ethernet', + '/doc/communication/LORA', + '/doc/communication/mymqtt', + '/doc/communication/NB-IOT', + '/doc/communication/rs485', + '/doc/communication/WiFi', + '/doc/communication/Zigbee' + ], + 'sensor': [ + '/doc/sensor/force_sensor', + '/doc/sensor/gas_sensor', + '/doc/sensor/heat_sensor', + '/doc/sensor/humidity_sensor', + '/doc/sensor/magneto_sensor', + '/doc/sensor/photoelec_sensor', + '/doc/sensor/pressure_sensor', + '/doc/sensor/voice_sensor' + ] +} + + +function getSidebarByCategory(category, lang = 'en') { + const links = JSON.parse(JSON.stringify(sidebar[category])) // Deep clone + return links.map(link => { + if (lang != 'en' && link.startsWith('/')) { + return `/${lang}${link}` + } + return link + }) +} + +module.exports = { + getSidebarByCategory +} \ No newline at end of file diff --git a/docs/doc/communication/4G.md b/docs/doc/communication/4G.md new file mode 100644 index 0000000..00b25fc --- /dev/null +++ b/docs/doc/communication/4G.md @@ -0,0 +1,258 @@ +# 4G + +## 模块介绍 + + +### EC20 模块 + +
+ + + + + +
+ + EC20 + + + EC20 Mini PCIe采用标准的Mini PCIe封装

+ 支持LTE,UMTS和GSM/GPRS网络

+ 最大上行速率为50Mbps,最大下行速率为100Mbps

+ 在缺乏3G和4G网络的偏远地区也能正常工作

+
+
+ +
+产品描述:EC20 Mini PCIe内嵌丰富的网络协议,集成多个工业标准接口,并支持多种软件功能(Windows XP, Windows Vista, Windows 7/8/8.1/10, Windows CE, Linux 和 Android 系统下的USB驱动,eCall*等),极大地拓展了其在M2M 领域的应用范围,如CPE、路由器、数据卡、平板电脑、车载、安防以及工业级PDA等

+EC20 Mini PCIe是采用 PCI Express® Mini Card标准接口的LTE模块;采用LTE 3GPP Rel.9技术,支持最大下行速率100Mbps和最大上行速率50Mbps。EC20 Mini PCIe系列模块包含EC20-E Mini PCIe、EC20-A Mini PCIe和EC20-C Mini PCIe三个版本,使其能够向后兼容现存的EDGE和GSM/GPRS网络,以确保在缺乏3G和4G网络的偏远地区也能正常工作。
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ LTE 版本 + + 3GPP E-UTRA Release 9 +
+ 频带宽度 + + 1.4/3/5/10/15/20MHz +
+ 天线 DL + + MIMO 2×2, supports Rx-diversity +
+ 供电电压 + + 3.3V~ 3.6V, 典型值:3.3V +
+ 工作温度 + + -40 °C ~ +80 °C +
+ 模块尺寸 + + 51.0 x 30.0 x 4.9mm +
+
+ + +
+ +### Air720 模块 +
+ + + + + +
+ + Air720 + + + 产品名称:

+ Air720H 4G LTE 模块

+ 产品型号:Air720H Module

+ 四模全网通4G模块

+ 移动+电信+联通

+ 统统支持

+
+
+
+Air720模块是一款带分集接收功能的4G多模无线通信模块,Air720H支持GSM/WCDMA/FDD/TDD,几乎能够满足所有的M2M的需求,如: +包括汽车及个人追踪服务、无线POS机、智能计量、工业级PDA以及其它物联网应用需求。
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ LTE 版本 + + 3GPP E-UTRA Release 9 +
+ 带宽 + + 1.4/3/5/10/15/20MHz +
+ 温度范围 + + -40℃ ~ +85℃ +
+ 模块尺寸 + + 32.0 x 29.0 x 2.4mm +
+ 封装方式 + + LCC封装 +
+ 供电电压 + + 3.3V ~ 4.3V,典型值 3.8V +
+
+ +### EC200T 模块 + +
+ + + + + +
+ + EC20t + + + 专为 M2M 和 IoT 应用而设计的LTE Cat 4 无线模块

+ 多网络制式覆盖

+ 支持FOTA远程升级功能

+ MIMO技术可满足无线通信系统对数据速率和连接可靠性的要求

+
+
+ +
+EC200T 内置丰富的网络协议,集成多个工业标准接口,并支持多种驱动和软件功能(适用于 Windows 7/8/10,Linux,Android 等操作系统下的USB驱动),极大地扩展了其在M2M领域的应用范围,如OTT,CPE,路由器,数据卡,平板电脑,安防以及工业级PDA等。 +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ LTE + + LTE FDD:最大 150Mbps(DL)/最大50Mbps(UL)
+ LTE TDD:最大 130Mbps(DL)/最大30Mbps(UL) +
+ 带宽 + + 1.4/3/5/10/15/20MHz +
+ 温度范围 + + -40℃ ~ +85℃ +
+ 模块尺寸 + + 29.0 x 32.0 x 2.4mm +
+ 封装方式 + + LCC封装 +
+ 供电电压 + + 3.4V ~ 4.5V,典型值 3.8V +
+
+ +## 模块配置和代码树 + +对于4G 模块,默认配置就可以测试,可能需要修改的是UART设备的名字:
+[\*] Enable 4G --->
+    --- Enable 4G
+    [ ] luat Air720 --->
+    [\*] Quectel EC20
+        [ ] Enable initialize by thread
+        [\*] Enable sample ---> (是否编译测试例程)
+        (-1) Power pin ---> (电源引脚配置,与电路板相关,模块测试无需修改)
+        (-1) Power status pin ---> (电源状态引脚配置,与电路板相关,模块测试无需修改)
+        (uart3) AT client device name ---> (模块连接的UART名字,取决于模块和主板的连接方式)
+        (1024) The maximum length of receive line buffer ---> (缓存大小,建议在1K以上)
+
+ ec20_CodeTree +
\ No newline at end of file diff --git a/docs/doc/communication/5G.md b/docs/doc/communication/5G.md new file mode 100644 index 0000000..fed958f --- /dev/null +++ b/docs/doc/communication/5G.md @@ -0,0 +1,11 @@ +# 5G + + +## 模块介绍 + + +## 模块配置和代码树 + + +## 测试程序 + diff --git a/docs/doc/communication/Bluetooth.md b/docs/doc/communication/Bluetooth.md new file mode 100644 index 0000000..b39f61c --- /dev/null +++ b/docs/doc/communication/Bluetooth.md @@ -0,0 +1,70 @@ +# bluetooth + +## 模块介绍 + + +### HC-08蓝牙模块 +
+ hc08 +
+
+ +HC-08 蓝牙串口通信模块是新一代的基于Bluetooth Specification V4.0 BLE 蓝牙协议的数传模块。无线工作频段为2.4 GHz ISM,调制方式是GFSK。模块最大发射功率为4dBm,接受灵敏度-93dBm,空旷环境下和手机可以实现80米超远距离通信。

+ +模块大小 26.9mm×13mm×2.2mm,集成了邮票封装孔和排针焊接孔,既可以贴片封装,也又可以焊接排针,很方便嵌入应用系统之内。自带 LED 状态指示灯,可直观判断蓝牙的连接状态。

+ +模块采用 TI 的 CC2540F256 芯片,配置 256K 字节空间,支持 AT 指令,用户可根据需要更改角色(主、从模式)以及串口波特率、设备名称等参数,使用灵活。

+ +
+ hc08_pin +
+
+HC-08 蓝牙模块第27/28/29/30引脚含义: +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
序号HC-08模块备注
1VCC(第27引脚)模块3.3V 供电正
2GND(第28引脚)模块公共地
3RXD(第29引脚)UART输入口,3.3V TTL电平
4TXD(第30引脚)UART输出口,3.3V TTL电平
+
+ + +## 模块配置和代码树 + +对于Bluetooth 模块,默认配置就可以测试,可能需要修改的是UART设备的名字:
+ +[\*] Enable Bluetooth --->
+    --- Enable Bluetooth
+    [\*] Quectel HC08--->
+        [ ] Enable initialize by thread
+        [\*] Enable sample ---> (是否编译测试例程)
+        (-1) Power pin ---> (电源引脚配置,与电路板相关,模块测试无需修改)
+        (-1) Power status pin ---> (电源状态引脚配置,与电路板相关,模块测试无需修改)
+        (uart3) AT client device name ---> (模块连接的UART名字,取决于模块和主板的连接方式)
+        (1024) The maximum length of receive line buffer ---> (缓存大小,建议在1K以上)
+ +
+ hc08_CodeTree +
\ No newline at end of file diff --git a/docs/doc/communication/CAN.md b/docs/doc/communication/CAN.md new file mode 100644 index 0000000..d158c36 --- /dev/null +++ b/docs/doc/communication/CAN.md @@ -0,0 +1 @@ +# CAN diff --git a/docs/doc/communication/LORA.md b/docs/doc/communication/LORA.md new file mode 100644 index 0000000..5a6473e --- /dev/null +++ b/docs/doc/communication/LORA.md @@ -0,0 +1 @@ +# LORA diff --git a/docs/doc/communication/NB-IOT.md b/docs/doc/communication/NB-IOT.md new file mode 100644 index 0000000..6cf05cf --- /dev/null +++ b/docs/doc/communication/NB-IOT.md @@ -0,0 +1,590 @@ +# NB-IOT + + + + + + + + + + + + + + + + +## 模块介绍 + + +### Quectel BC28 + +
+ bc26 +
+
+ +BC28 是一款超紧凑、高性能、低功耗的多频段 NB-IoT 无线通信模块,支持 B1/B3/B8/B5/B20/B28 频段。其尺寸仅为17.7 mm × 15.8 mm × 2.0 mm,能最大限度地满足终端设备对小尺寸模块产品的需求,同时有效地帮助客户减小产品尺寸并优化产品成本。BC28 在设计上兼容移远通信 GSM/GPRS 系列的 M26 模块和 NB-IoT 系列的 BC26 模块,方便客 +户快速、灵活的进行产品设计和升级。

+BC28 采用更易于焊接的 LCC 封装,可通过标准 SMT 设备实现模块的快速生产,为客户提供可靠的连接方式,特别适合自动化、大规模、低成本的现代化生产方式。SMT 贴片技术也使 BC28 具有高可靠性,以满足复杂环境下的应用需求。

+凭借紧凑的尺寸、超低功耗和超宽工作温度范围,BC28 成为 IoT 应用领域的理想选择,常被用于无线抄表、共享单车、智能停车、智慧城市、安防、资产追踪、智能家电、农业和环境监测以及其它诸多行业,以提供完善的短信和数据传输服务。

+ +#### Quectel BC28 特性 ++ 尺寸紧凑的多频段 NB-IoT 无线通信模块 ++ 超低功耗、超高灵敏度 ++ LCC 封装,适合批量生产 ++ 封装设计兼容移远通信 GSM/GPRS M26 模块和 NB-IoT 系列的 BC26 ++ 模块,易于产品升级 ++ 内嵌网络服务协议栈 ++ 通过提供参考设计、评估板和及时的技术支持可满足客户产品快速上市的要求 + +#### 基本参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数数值
供电电压 2.1~3.63 V,典型值 3.3 V (GPIO 电压域: 1.8 V)
温度范围正常工作温度:-35 °C ~ +75 °C
扩展工作温度:-40 °C ~ +85 °C
外形尺寸17.7 mm × 15.8 mm × 2.0 mm
输出功率23 dBm ±2 dB
重传灵敏度-129dBm
Cat NB1 功耗(典型值)3.5 μA @ PSM
0.24 mA @ 空闲模式(eDRX = 81.92 s)
0.35 mA @ 空闲模式(DRX = 2.56 s)
110 mA @ LTE Cat NB1, 23 dBm
Cat NB2 功耗(典型值)待定
+ + + +## 模块配置和代码树 + +对于NB-IOT 模块,默认配置就可以测试,可能需要修改的是UART设备的名字:
+ +[\*] Enable NB-IOT --->
+    --- Enable NB-IOT
+    [\*] Quectel BC26 --->
+    [ ] Gosuncn ME3616
+        [ ] Enable initialize by thread
+        [\*] Enable sample ---> (是否编译测试例程)
+        (-1) Power pin ---> (电源引脚配置,与电路板相关,模块测试无需修改)
+        (-1) Power status pin ---> (电源状态引脚配置,与电路板相关,模块测试无需修改)
+        (uart3) AT client device name ---> (模块连接的UART名字,取决于模块和主板的连接方式)
+        (1024) The maximum length of receive line buffer ---> (缓存大小,建议在1K以上)
+
+ bc26_CodeTree +
\ No newline at end of file diff --git a/docs/doc/communication/WiFi.md b/docs/doc/communication/WiFi.md new file mode 100644 index 0000000..a5c8677 --- /dev/null +++ b/docs/doc/communication/WiFi.md @@ -0,0 +1,71 @@ +# WiFi + +## 模块介绍 + + +### ESP8266 +
+ esp8266 +
+
+ +ESP8266芯片是一款串口转无线模芯片,内部自带固件,用户操作简单,无需编写时序信号等。
+ +#### ESP8266 特性: +* 802.11 b/g/n +* 内置低功耗32位CPU:可以兼作应用处理器 +* 内置10 bit高精度ADC +* 内置TCP/IP协议栈 +* 内置TR开关、balun、LNA、功率放大器和匹配网络 +* 内置PLL、稳压器和电源管理组件 +* 支持天线分集 +* STBC、1x1 MIMO、2x1 MIMO +* A-MPDU、A-MSDU的聚合和0.4 s的保护间隔 +* WiFi @ 2.4 GHz,支持 WPA/WPA2 安全模式 +* 支持STA/AP/STA+AP工作模式 +* 支持Smart Config功能(包括Android和iOS设备) +* SDIO 2.0、(H) SPI、UART、I2C、I2S、IR Remote Control、PWM、GPIO +* 深度睡眠保持电流为10 uA,关断电流小于5 uA +* 2 ms之内唤醒、连接并传递数据包 +* 802.11b模式下+20 dBm的输出功率 +* 待机状态消耗功率小于1.0 mW (DTIM3) +* 工作温度范围:-40°C - 125°C +* 通过 FCC, CE, TELEC, WiFi Alliance 及 SRRC 认证 + +## 软件结构 +
+ esp8266 software structure +
+
+ +软件结构如上图,故测试WiFi的时候需要添加 **AT protocol** 和**Mqtt** + +## 模块配置和代码树 +[\*] Enable Wifi --->
+    --- Enable Wifi
+    [\*] Espressif ESP8266 ---> (里面的默认设置就可以使用,无需修改)
+        --- Espressif ESP8266
+        [ ] Enable initialize by thread
+        [\*] **Enable sample(模块注册测试程序, 选定后会再启动时自动加载模块)**
+        (xiaoshanos) WIFI ssid
+        (12345678) WIFI password
+        (uart2) AT client device name
+        (512) The maximum length of receive line buffer

+ +[\*] Enable AT protocol ---> (里面的默认设置就可以使用,无需修改)
+    --- Enable AT protocol
+    Socket abstraction layer --->(里面的默认设置就可用,无需修改)
+    Network interface device --->(里面的默认设置就可用,无需修改)
+    AT commands ---> (里面的默认设置就可用,无需修改,但可添加调试信息)

+[\*] Enable AT commands
+    **[ ]Enable debug log output(simple)**
+    [\*]Enable AT commands client
+    (2) The maximum number of supported clients
+    [\*]Enable BSD Socket support
+     **[ ]Enable print RAW format communication data(complex)**
+    (128)The maximum length of AT Commands buffer

+[\*] Enable Mqtt --->(当需要测试mqtt时可以打开,里面的默认设置就可以使用,无需修改)
+ +
+ esp8266_CodeTree +
\ No newline at end of file diff --git a/docs/doc/communication/Zigbee.md b/docs/doc/communication/Zigbee.md new file mode 100644 index 0000000..2a8a812 --- /dev/null +++ b/docs/doc/communication/Zigbee.md @@ -0,0 +1 @@ +# Zigbee diff --git a/docs/doc/communication/at.md b/docs/doc/communication/at.md new file mode 100644 index 0000000..9b5f402 --- /dev/null +++ b/docs/doc/communication/at.md @@ -0,0 +1,711 @@ + +# AT + + + + + + + + + + + + + + + + + + +## AT 指令简介 + +AT指令是应用于终端设备与PC应用之间的连接与通信的指令。AT 即Attention。每个AT命令行中只能包含一条AT指令;对于AT指令的发送,除AT两个字符外,最多可以接收1056个字符的长度(包括最后的空字符)。

+ +AT指令集是从终端设备(Terminal Equipment,TE)或数据终端设备(Data Terminal Equipment,DTE)向终端适配器(Terminal Adapter,TA)或数据电路终端设备(Data Circuit Terminal Equipment,DCE)发送的。

+其对所传输的数据包大小有定义:即对于AT指令的发送,除AT两个字符外,最多可以接收1056个字符的长度(包括最后的空字符)。

+每个AT命令行中只能包含一条AT指令;对于由终端设备主动向PC端报告的URC指示或者response响应,也要求一行最多有一个,不允许上报的一行中有多条指示或者响应。AT指令以回车作为结尾,响应或上报以回车换行为结尾。
+ +## ESP8266 中AT指令的使用 + +下面以ESP8266为例,来说明AT指令的使用。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
指令描述
AT测试 AT 启动
AT+RST重启模块
AT+GMR查看版本信息
AT+GSLPDeep-sleep 模式
ATE开关回显功能
AT+RESTORE恢复出厂设置
AT+UART_CURUART 当前临时配置
AT+UART_DEFUART 默认配置,保存到 Flash
AT+SLEEP设置 sleep 模式
AT+WAKEUPGPIO设置 GPIO 唤醒 Light-sleep 模式
AT+RFPOWER设置 RF TX Power 上限
AT+RFVDD根据 VDD33 设置 RF TX Power
AT+SYSRAM查询系统当前剩余内存
AT+SYSADC查询 ADC
AT+SYSIOSETCFG设置 IO ⼯工作模式
AT+SYSIOGETCFG查询 IO ⼯工作模式
AT+SYSGPIODIR设置 GPIO ⼯工作为输⼊入或输出
AT+SYSGPIOWRITE设置 GPIO 的输出电平
AT+SYSGPIOREAD读取 GPIO 的电平状态
AT+SYSMSG_CUR设置当前系统消息
AT+SYSMSG_DEF设置默认系统消息
+ + + diff --git a/docs/doc/communication/ethernet.md b/docs/doc/communication/ethernet.md new file mode 100644 index 0000000..9adac67 --- /dev/null +++ b/docs/doc/communication/ethernet.md @@ -0,0 +1,948 @@ +# ethernet + + + + + + + + + + + + + + + +## 模块介绍 + + +### USRK7 +
+ usr-k7 +
+
+
+ +USR-K7 模块用于实现串口到以太网口的数据的双向透明传输,用户无需关心具体细节,模块内部完成协 +议转换。串口侧是串口电平数据,以太网口侧是网络数据包,通过简单设置即可指定工作细节。参数可以通过 +内置网页也可以通过设置软件进行设置,一次设置永久保存。
+ +#### 功能特点 ++ ARM 内核,工业级温度范围,精心优化的 TCP/IP 协议栈,稳定可靠 ++ 10/100Mbps 网口,支持 Auto-MDI/MDIX,支持交叉直连网线自适应 ++ 支持 TCP Server、TCP Client、UDP Client、UDP Server、Httpd Client 多种工作模式 ++ 内置网页,可通过网页进行参数设置,也可为用户定制网页;并且内置网页端口可设置(默认 80) ++ 支持 485 收发使能,串口可以作为 485 使用。 ++ 支持 RTS/CTS 硬件流控功能,支持 Xon/Xoff 软件流控 ++ 支持虚拟串口软件(USR-VCOM) ++ 串口波特率支持 600bps~1Mbps;支持 None、Odd、Even、Mark、Space 五种校验方式 ++ 支持 Modbus 网关功能,工业现场使用更加方便 ++ 支持 Reload 按键,即硬件恢复出厂设置 ++ RJ45 带 Link/Data 指示灯,网口内置隔离变压器,1.5KV 电磁隔离 ++ 全球唯一 MAC 地址,也允许用户自定义临时 MAC 地址 ++ 支持通过网络升级固件;支持域名服务器;支持 DHCP 自动获取 IP ++ 支持 keepalive 机制,可快速探查死连接等异常并快速重连 ++ 支持账户跟密码,可用于网页登录以及网络设置,更安全 ++ 支持一路 Websocket 功能,实现网页与串口的数据双向传输 + +#### 基本参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
分类 参数 数值
硬件参数 工作电压 DC 3.0~3.6 V,(3.3V 最佳)
工作电流 130mA@3.3V
网口规格 RJ45、10/100Mbps、交叉直连自适应
封装形式 插针式封装
串口波特率 600~1M(bps)
软件参数  网络协议 IP、TCP、UDP、DHCP、DNS、HTTP、ARP、ICMP、Web socket
IP 获取方式 静态 IP、DHCP
域名解析 支持
用户配置 软件配置,网页配置,AT 指令配置
简单透传方式 TCP Server/TCP Client/UDP Server/UDP Client
Modbus 支持 Modbus 网关
网页转串口 支持 WebSocket 通信方式的网页转串口
Httpd Client 支持
类 RFC2217 支持
自定义网页 支持
网络缓存 发送:16Kbyte;接收:16Kbyte;
串口缓存 发送:2Kbyte;接收:2Kbyte;
平均传输延时 局域网内<10ms
配套软件 虚拟串口软件、透传云测试软件、参数设置软件
认证 CE、FCC、ROHS
可靠等级 1.5KV 电磁隔离
尺寸 35.0x19.39x18.25 mm(L*W*H)
工作温度 -40~85℃
+ + + + +## 模块配置和代码树 + +对于ethernet 模块,默认配置就可以测试,可能需要修改的是UART设备的名字:
+ +[\*] Enable Ethernet --->
+    --- Enable Ethernet
+    [\*] USR IOT USRK7
+        [ ] Enable initialize by thread
+        [\*] Enable sample ---> (是否编译测试例程)
+        (-1) Power pin ---> (电源引脚配置,与电路板相关,模块测试无需修改)
+        (-1) Power status pin ---> (电源状态引脚配置,与电路板相关,模块测试无需修改)
+        (uart3) AT client device name ---> (模块连接的UART名字,取决于模块和主板的连接方式)
+        (1024) The maximum length of receive line buffer ---> (缓存大小,建议在1K以上)
+ +
+ usr-k7_CodeTree +
\ No newline at end of file diff --git a/docs/doc/communication/imagesrc/Air720.png b/docs/doc/communication/imagesrc/Air720.png new file mode 100644 index 0000000..79cfca9 Binary files /dev/null and b/docs/doc/communication/imagesrc/Air720.png differ diff --git a/docs/doc/communication/imagesrc/bc26.png b/docs/doc/communication/imagesrc/bc26.png new file mode 100644 index 0000000..a7a59b6 Binary files /dev/null and b/docs/doc/communication/imagesrc/bc26.png differ diff --git a/docs/doc/communication/imagesrc/bc26_CodeTree.png b/docs/doc/communication/imagesrc/bc26_CodeTree.png new file mode 100644 index 0000000..43ed04e Binary files /dev/null and b/docs/doc/communication/imagesrc/bc26_CodeTree.png differ diff --git a/docs/doc/communication/imagesrc/ec20.png b/docs/doc/communication/imagesrc/ec20.png new file mode 100644 index 0000000..950a9dc Binary files /dev/null and b/docs/doc/communication/imagesrc/ec20.png differ diff --git a/docs/doc/communication/imagesrc/ec200t.png b/docs/doc/communication/imagesrc/ec200t.png new file mode 100644 index 0000000..d288672 Binary files /dev/null and b/docs/doc/communication/imagesrc/ec200t.png differ diff --git a/docs/doc/communication/imagesrc/ec20_CodeTree.png b/docs/doc/communication/imagesrc/ec20_CodeTree.png new file mode 100644 index 0000000..47546c0 Binary files /dev/null and b/docs/doc/communication/imagesrc/ec20_CodeTree.png differ diff --git a/docs/doc/communication/imagesrc/esp8266.jpg b/docs/doc/communication/imagesrc/esp8266.jpg new file mode 100644 index 0000000..f160ea4 Binary files /dev/null and b/docs/doc/communication/imagesrc/esp8266.jpg differ diff --git a/docs/doc/communication/imagesrc/esp8266_CodeTree.png b/docs/doc/communication/imagesrc/esp8266_CodeTree.png new file mode 100644 index 0000000..30f3b3b Binary files /dev/null and b/docs/doc/communication/imagesrc/esp8266_CodeTree.png differ diff --git a/docs/doc/communication/imagesrc/esp8266_swstruct.png b/docs/doc/communication/imagesrc/esp8266_swstruct.png new file mode 100644 index 0000000..6547062 Binary files /dev/null and b/docs/doc/communication/imagesrc/esp8266_swstruct.png differ diff --git a/docs/doc/communication/imagesrc/hc08.png b/docs/doc/communication/imagesrc/hc08.png new file mode 100644 index 0000000..ec71a2a Binary files /dev/null and b/docs/doc/communication/imagesrc/hc08.png differ diff --git a/docs/doc/communication/imagesrc/hc08_CodeTree.png b/docs/doc/communication/imagesrc/hc08_CodeTree.png new file mode 100644 index 0000000..fc005f9 Binary files /dev/null and b/docs/doc/communication/imagesrc/hc08_CodeTree.png differ diff --git a/docs/doc/communication/imagesrc/hc08_pin.png b/docs/doc/communication/imagesrc/hc08_pin.png new file mode 100644 index 0000000..bafcaa1 Binary files /dev/null and b/docs/doc/communication/imagesrc/hc08_pin.png differ diff --git a/docs/doc/communication/imagesrc/usr-k7.png b/docs/doc/communication/imagesrc/usr-k7.png new file mode 100644 index 0000000..a42b83c Binary files /dev/null and b/docs/doc/communication/imagesrc/usr-k7.png differ diff --git a/docs/doc/communication/imagesrc/usr-k7_CodeTree.png b/docs/doc/communication/imagesrc/usr-k7_CodeTree.png new file mode 100644 index 0000000..defafe1 Binary files /dev/null and b/docs/doc/communication/imagesrc/usr-k7_CodeTree.png differ diff --git a/docs/doc/communication/mymqtt.md b/docs/doc/communication/mymqtt.md new file mode 100644 index 0000000..bb65c9e --- /dev/null +++ b/docs/doc/communication/mymqtt.md @@ -0,0 +1,31 @@ +# mymqtt + +## Mqtt简介 + +MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

+ +MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。

+ +## 主要特性 + +MQTT协议工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性: + ++ (1)使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。
+这一点很类似于XMPP,但是MQTT的信息冗余远小于XMPP,,因为XMPP使用XML格式文本来传递数据。 + ++ (2)对负载内容屏蔽的消息传输。 + ++ (3)使用TCP/IP提供网络连接。
+主流的MQTT是基于TCP连接进行数据推送的,但是同样有基于UDP的版本,叫做MQTT-SN。这两种版本由于基于不同的连接方式,优缺点自然也就各有不同了。 + ++ (4)有三种消息发布服务质量:
+"至多一次",消息发布完全依赖底层TCP/IP网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。这一种方式主要普通APP的推送,倘若你的智能设备在消息推送时未联网,推送过去没收到,再次联网也就收不到了。
+"至少一次",确保消息到达,但消息重复可能会发生。
+"只有一次",确保消息到达一次。在一些要求比较严格的计费系统中,可以使用此级别。在计费系统中,消息重复或丢失会导致不正确的结果。这种最高质量的消息发布服务还可以用于即时通讯类的APP的推送,确保用户收到且只会收到一次。 + ++ (5)小型传输,开销很小(固定长度的头部是2字节),协议交换最小化,以降低网络流量。
+这就是为什么在介绍里说它非常适合"在物联网领域,传感器与服务器的通信,信息的收集",要知道嵌入式设备的运算能力和带宽都相对薄弱,使用这种协议来传递消息再适合不过了。 + ++ (6)使用Last Will和Testament特性通知有关各方客户端异常中断的机制。
+Last Will:即遗言机制,用于通知同一主题下的其他设备发送遗言的设备已经断开了连接。 +Testament:遗嘱机制,功能类似于Last Will。 \ No newline at end of file diff --git a/docs/doc/communication/rs485.md b/docs/doc/communication/rs485.md new file mode 100644 index 0000000..5463d7a --- /dev/null +++ b/docs/doc/communication/rs485.md @@ -0,0 +1 @@ +# rs485 diff --git a/docs/doc/constructenv/bianyi.md b/docs/doc/constructenv/bianyi.md new file mode 100755 index 0000000..ea2e2f0 --- /dev/null +++ b/docs/doc/constructenv/bianyi.md @@ -0,0 +1,110 @@ +# 编译环境 + +## 前言 + +

本文档将介绍如何在个人pc设备上构建编译环境来编译 XiUOS +操作系统, 需要注意的是, 目前 XiUOS 暂时只支持在Linux系统上编译。

+ +## 硬件安装 + +> * 硬件要求 +>> 64位系统,磁盘空间大于40G。 +> * linux内核下载 +>> 因为XiUOS是在Ubuntu 16.04上开发与测试的(Ubuntu 18.04、20.04版本也支持),因此我们推荐您使用Ubuntu 16.04版本的系统执行编译环境搭建。 +> * Ubuntu下载网址 +>> [here](https://ubuntu.com/download/desktop) + + +## 依赖包安装 + + $ sudo apt-get install gcc + $ sudo apt-get install make + $ sudo apt-get install libncurses5-dev + $ sudo apt-get install openssl + $ sudo apt-get install libssl-dev + $ sudo apt-get install build-essential + $ sudo apt-get install pkg-config + $ sudo apt-get install libc6-dev + $ sudo apt-get install bison + $ sudo apt-get install flex + $ sudo apt-get install libelf-dev + $ sudo apt-get install autoconf + $ sudo apt-get install libtool + $ sudo apt-get install gpref +## 源码下载 + +> * 简要介绍 +>> XiUOS的源码和相关文档介绍使用git进行集成管理,建议开发者使用git工具进行版本控制和分支管理 +> * git配置 + + $ git config --global user.name "your name" + $ git config --global user.email "your email" +> * [XiUOS源码网址](https://ubuntu.com/download/desktop) + +## 工具链 + +> * ARM下编译需要安装arm-none-eabi编译工具, 安装到Ubuntu的默认路径/usr/bin/arm-none-eabi- +>> 1. 命令行下载 +>>> $ sudo apt-get install gcc-arm-none-eabi +>> 2. 源码下载 +>>> [ARM官网下载](https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads) +> * RISC-V下编译需要安装riscv-none-embed-编译工具, 安装到Ubuntu的默认路径/opt/ +>> [下载网址](https://github.com/xpack-dev-tools/riscv-none-embed-gcc-xpack/releases/), 根据需求选择不同的版本 +>> 操作方法,以xpack-riscv-none-embed-gcc-linux-x64.tar.gz为例 +>>> $ tar -zxvf xpack-riscv-none-embed-gcc-linux-x64.tar.gz -C /opt/ +## 烧写工具 +> * ARM下烧写软件(ST-LINK) +>> 下载源码 + + git clone https://github.com/texane/stlink.git + + + +> * RISC-V下烧写软件(KFLASH) + + $ sudo pip3 install kflash + // 如果在安装工具失败,则执行一下命令 + $ sudo python -m pip install kflash + $ sudo python3 -m pip install kflash + $ sudo pip install kflash + $ sudo pip2 install kflash + +## FAQ + + + + +> 尝试借助gitee下载源码 + + + + +> * Operation feedback: enable the users to clearly perceive their operations by style updates and interactive effects; +> * Visual feedback: reflect current state by updating or rearranging elements of the page. + + + + +> * Simplify the process: keep operating process simple and intuitive; +> * Definite and clear: enunciate your intentions clearly so that the users can quickly understand and make decisions; +> * Easy to identify: the interface should be straightforward, which helps the users to identify and frees them from memorizing and recalling. + + + + +> * Decision making: giving advices about operations is acceptable, but do not make decisions for the users; +> * Controlled consequences: users should be granted the freedom to operate, including canceling, aborting or terminating current operation. + + + + + + diff --git a/docs/doc/constructenv/debug.md b/docs/doc/constructenv/debug.md new file mode 100755 index 0000000..775719e --- /dev/null +++ b/docs/doc/constructenv/debug.md @@ -0,0 +1,115 @@ +# 编译步骤 + +## 前言 + +本文档将介绍XiUOS使用jlink软件的配置、调试过程。 + +## 软件安装 ++ jlink包安装 + +第一步,进入jlink官网[下载网址](https://www.segger.com/downloads/jlink) + +
+ +
+ +第二步,选择版本并下载安装包,此处下载的安装包版本为V6.72e,即JLink_Linux_V672e_x86_64.deb。 + +
+ +
+ +第三步,安装JLink_Linux_V672e_x86_64.deb + + $ dpkg -i JLink_Linux_V672e_x86_64.deb + ++ openocd安装 + +第一步,进入[下载网址](https://github.com/kendryte/openocd-kendryte/releases), +下载Unbuntu版本的openocd。XiUOS中下载的kendryte-openocd-0.2.3-ubuntu64.tar.gz + +第二步,安装openocd + + $ sudo mv kendryte-openocd-0.2.2-ubuntu64.tar.gz /opt + $ cd /opt + $ sudo tar -zxvf kendryte-openocd-0.2.2-ubuntu64.tar.gz + + + $ sudo apt install libusb-dev libftdi-dev libhidapi-dev + +第三步,openocd文件配置 + +打开配置文件,修改第三行 jlink serial 504503073的504503073为具体JLINK设备的标签。 + + $ cd /opt/kendryte-openocd + $ vim ctl/openocd.cfg + +
+ +
+ +第四步,打开openocd软件 + + $ cd /opt/kendryte-openocd + $ ./bin/openocd -f ./ctl/openocd.cfg +成功运行则显示如下的界面。 +
+ +
+ +## 调试程序 + + $ riscv-none-embed-gdb XiaoShan_kd233.elf --eval-command="target remote 127.0.0.1:3333" + +运行上述命令,其中, ++ XiaoShan_kd233.elf是编译过程生成的elf文件; ++ 127.0.0.1表示本地IP地址,也可以制定远程地址; ++ 3333是openocd监听的端口号; + +成功连接openocd之后,界面如下所示,之后就可以使用load\break\continue等gdb命令进行调试了。 + +
+ +
+ + +## FAQ + + + + +> 重新连接JLINK设备。 + + + + +> * Operation feedback: enable the users to clearly perceive their operations by style updates and interactive effects; +> * Visual feedback: reflect current state by updating or rearranging elements of the page. + + + + + + \ No newline at end of file diff --git a/docs/doc/constructenv/goujian.md b/docs/doc/constructenv/goujian.md new file mode 100755 index 0000000..f055390 --- /dev/null +++ b/docs/doc/constructenv/goujian.md @@ -0,0 +1,94 @@ +# 编译步骤 + +## 前言 + +

本文档将介绍XiUOS分别在基于ARM和RISC-V架构的开发板上的编译、烧录和运行的过程。包括开发板选择及配置初始化、编译命令等信息。 +

+ +## 开发板的选择及配置初始化 + +

在执行编译之前,我们需要先确定XiUOS系统要运行在哪个开发板上,然后针对具体的开发板设置相关的配置信息。

+ ++ 开发板的选择 +为了查看XiUOS支持的开发板种类,可以执行以下命令,也可以[查看支持的开发板](/hardwaresupport/arm32/stm32f407-st-discovery.html)。 + + $ make BOARD=list ++ 配置初始化 + + 以stm32f407-st-discovery为例,进行开始系统参数。 + + + + + $ make BOARD=stm32f407-st-discovery menuconfig + + 对应的配置信息将存放在board/stm32f407-st-discovery/xsconfig.h头文件中,文件中的选项均以XS_为前缀开头。 + + + 以kd233为例,进行开始系统参数。 + + $ make BOARD=KD233 menuconfig + + + 对应的配置信息将存放在board/kd233/xsconfig.h头文件中,文件中的选项均以XS_为前缀开头。 + +## 编译命令 + 通用编译命令, 默认为BOARD=KD233 + + $ make [BOARD=<所选开发板>] ++ 当 make 命令被执行时,它会扫描当前目录下Makefile或makefile文件找到目标以及其依赖。如果这些依赖自身也是目标,继续为这些依赖扫描Makefile 建立其依赖关系,然后编译它们。 ++ 创建build目录,目录下包含了各种目标文件、.bin、.elf等文件 + + 目标文件,以.o结尾的文件 + + .bin 二进制文件 + + .elf 可执行文件 +## 烧录命令 ++ 基于ARM开发板的烧录命令 + + $ sudo st-flash write <生成的.elf文件> 0x8000000 ++ 基于RISC-V开发板的烧录命令 + + $ sudo kflash <生成的.elf文件> -t + +## 运行界面 ++ XiUOS运行在ARM开发板 + + + ++ XiUOS运行在RISC-V开发板 + + +## FAQ + + + + +> 尝试借助gitee下载源码 + + + + +> * Operation feedback: enable the users to clearly perceive their operations by style updates and interactive effects; +> * Visual feedback: reflect current state by updating or rearranging elements of the page. + + + + +> * Simplify the process: keep operating process simple and intuitive; +> * Definite and clear: enunciate your intentions clearly so that the users can quickly understand and make decisions; +> * Easy to identify: the interface should be straightforward, which helps the users to identify and frees them from memorizing and recalling. + + + + +> * Decision making: giving advices about operations is acceptable, but do not make decisions for the users; +> * Controlled consequences: users should be granted the freedom to operate, including canceling, aborting or terminating current operation. + + + + \ No newline at end of file diff --git a/docs/doc/hwsupport/aiit-arm32.md b/docs/doc/hwsupport/aiit-arm32.md new file mode 100644 index 0000000..eff002e --- /dev/null +++ b/docs/doc/hwsupport/aiit-arm32.md @@ -0,0 +1,8 @@ +# aiit-arm32 +## 综述 +
+aiit-arm32 +

AIIT-ARM32

+ + XiUOS最新分支支持aiit-arm32开发板,该开发板作为一种标准的板子,支持各种上层组件和应用程序。 +
\ No newline at end of file diff --git a/docs/doc/hwsupport/aiit-arm64.md b/docs/doc/hwsupport/aiit-arm64.md new file mode 100644 index 0000000..a8e594a --- /dev/null +++ b/docs/doc/hwsupport/aiit-arm64.md @@ -0,0 +1,59 @@ +# aiit-arm64 +## 综述 +
+
+aiit-arm64 +
+

AIIT-ARM64

+ + XiUOS最新分支支持stm32f407-st-discovery开发板,该开发板作为一种标准的板子,支持各种上层组件和应用程序。 +
+ +## 硬件特点 + ++ Core: Arm® 32-bit Cortex®-M4 CPU with FPU, Adaptive real-time accelerator (ART Accelerator) allowing 0-wait state execution from Flash memory, frequency up to 168 MHz, memory protection unit, 210 DMIPS/1.25 DMIPS/MHz (Dhrystone 2.1), and DSP instructions ++ Memories +

1. Up to 1 Mbyte of Flash memory

+

2. Up to 192+4 Kbytes of SRAM including 64-Kbyte of CCM (core coupled memory) data RAM

+

3. Up to 192+4 Kbytes of SRAM including 64-Kbyte of CCM (core coupled memory) data RAM

+

4. 512 bytes of OTP memory

+

5. Flexible static memory controller supporting Compact Flash, SRAM, PSRAM, NOR and NAND memories

++ LCD parallel interface, 8080/6800 modes ++ Clock, reset and supply management +

1. 1.8 V to 3.6 V application supply and I/Os

+

2. POR, PDR, PVD and BOR

+

3. 4-to-26 MHz crystal oscillator

+

4. Internal 16 MHz factory-trimmed RC (1% accuracy)

+

5. 32 kHz oscillator for RTC with calibration

+

6. Internal 32 kHz RC with calibration

++ Low-power operation +

1. Sleep, Stop and Standby modes

+

2. VBAT supply for RTC, 20×32 bit backup registers + optional 4 KB backup SRAM

++ 3×12-bit, 2.4 MSPS A/D converters: up to 24 channels and 7.2 MSPS in triple interleaved mode ++ 2×12-bit D/A converters ++ General-purpose DMA: 16-stream DMA controller with FIFOs and burst support ++ Up to 17 timers: up to twelve 16-bit and two 32-bit timers up to 168 MHz, each with up to 4 IC/OC/PWM or pulse counter and quadrature (incremental) encoder input ++ Debug mode +

1. Serial wire debug (SWD) & JTAG interfaces

+

2. Cortex-M4 Embedded Trace Macrocell™

++ Up to 140 I/O ports with interrupt capability +

1. Up to 136 fast I/Os up to 84 MHz

+

2. Up to 138 5 V-tolerant I/Os

++ Up to 15 communication interfaces +

1. Up to 3 × I2C interfaces (SMBus/PMBus)

+

2. Up to 4 USARTs/2 UARTs (10.5 Mbit/s, ISO 7816 interface, LIN, IrDA, modem control)

+

3. Up to 3 SPIs (42 Mbits/s), 2 with muxed full-duplex I2S to achieve audio class accuracy via internal audio PLL or external clock

+

4. 2 × CAN interfaces (2.0B Active)

+

5. SDIO interface

++ Advanced connectivity +

1. USB 2.0 full-speed device/host/OTG controller with on-chip PHY

+

2. USB 2.0 high-speed/full-speed device/host/OTG controller with dedicated DMA, on-chip full-speed PHY and ULPI

+

3. 10/100 Ethernet MAC with dedicated DMA: supports IEEE 1588v2 hardware, MII/RMII

++ 8- to 14-bit parallel camera interface up to 54 Mbytes/s ++ True random number generator ++ CRC calculation unit ++ 96-bit unique ID ++ RTC: subsecond accuracy, hardware calendar + +## 支持的功能 + diff --git a/docs/doc/hwsupport/hifive1-rev.md b/docs/doc/hwsupport/hifive1-rev.md new file mode 100644 index 0000000..b2f6b1e --- /dev/null +++ b/docs/doc/hwsupport/hifive1-rev.md @@ -0,0 +1,46 @@ +# RISC-V HIFIVE1-REV-B + +## 综述 +
+
+hifive1-rev-b +
+
HIFIVE1-REV-B
+ + XiUOS最新分支支持IFIVE1-REV-B开发板,该开发板作为一种标准的板子,支持各种上层组件和应用程序。 +
+ +## 硬件特点 ++ Microcontroller: FE310-G002 ++ Operating Voltage: 3.3 V and 1.8 V ++ Input Voltage: 5 V USB or 7-12 VDC Jack ++ IO Voltage: 3.3 V ++ Digital I/O Pins: 19 ++ PWM Pins: 9 ++ SPI Controllers/HW CS Pins: 1/3 ++ UART: 2 ++ I2C: 1 ++ Networking: WiFi/BT (off-chip) ++ External Interrupt Pins: 19 ++ External Wakeup Pins: 1 ++ Flash Memory: 32 Mbit Off-Chip (ISSI SPI Flash) ++ Host Interface (microUSB): Program, Debug, and Serial Communication ++ Debug: Segger J-Link, drag/drop code download ++ Weight: 22 g + +### 更多信息[查看网址](https://www.sifive.com/boards/hifive1-rev-b) + +## 支持的功能 + +## 编程与调试 +针对**HIFIVE1-REV-B**开发板的配置和刷新信息,详见[开发环境构建](/environment/debug.html) + + \ No newline at end of file diff --git a/docs/doc/hwsupport/kd233.md b/docs/doc/hwsupport/kd233.md new file mode 100644 index 0000000..3b96c19 --- /dev/null +++ b/docs/doc/hwsupport/kd233.md @@ -0,0 +1,55 @@ +# RISC-V KD233 +## 综述 +
+
+kd233 +
+

KD233

+ + XiUOS最新分支支持KD233开发板,该开发板作为一种标准的板子,支持各种上层组件和应用程序。 +
+ +## 硬件特点 ++ 性能 + + 中央处理器:RISC-V Dual Core 64bit, with FPU + + 图像识别:QVGA@60fps/VG@30fps + + 语音识别:麦克风阵列(8 mics) ++ 安全 + + 高级加密硬件加速器(AES) + + 一次性只读存储器(OTP)SHA256 ++ 功耗 + + 典型应用场景功耗 < 1W + + 芯片功耗 < 300mW ++ 扩展性 + + 操作系统:FreeRTOS + + 网络模型:TinyYOLOv2(after pruned) + + 深度学习框架:TensorFlow/Keras/Darknet + + 外设:FPIOA、UART、GPIO、SPI、I2C、I2S、WDT、TIMER、RTC等等 +### 更多信息 ++ [KD233](https://canaan-creative.com/product/kendryteai) + +## 支持的功能 +| 名称 | 控制器 | 驱动描述 | +| ---- | ---- | ---- | +|
AUDIO
| on-chip | audio音频控制 | +|
CAMERA
| on-chip | camera驱动控制 | +|
DMA
| on-chip | dma驱动控制 | +|
FFT
| on-chip | 快速傅里叶变换 | +|
GPIO
| on-chip | gpio 输入输出控制 | +|
I2C
| on-chip | i2c总线 | +|
I2S
| on-chip | i2s总线 | +|
KPU
| on-chip | kpu计算架构 | +|
LCD
| on-chip | lcd 液晶显示器控制 | +|
PLIC
| on-chip | 中断控制 | +|
PWM
| on-chip | pwm驱动控制 | +|
RTC
| on-chip | rtc实时时钟驱动控制 | +|
SECURITY
| on-chip | 安全 | +|
SPI
| on-chip | spi总线驱动控制 | +|
SYS_CLOCK
| on-chip | 系统时钟控制 | +|
TIMER
| on-chip | timer重置和计时控制 | +|
UART
| on-chip | uart串口驱动控制 | +|
VIDEO
| on-chip | video视频控制器驱动 | +|
WATCHDOG
| on-chip | watchdog看门狗控制 | + +## 编程与调试 +针对**KD233**开发板的配置和刷新信息,详见[开发环境构建](/environment/bianyi.html) \ No newline at end of file diff --git a/docs/doc/hwsupport/maxgo.md b/docs/doc/hwsupport/maxgo.md new file mode 100644 index 0000000..bbc878d --- /dev/null +++ b/docs/doc/hwsupport/maxgo.md @@ -0,0 +1,46 @@ +# RISC-V MAXGO +## 综述 +
+
+maxgo +
+

MAXGO

+ + XiUOS最新分支支持MAXGO开发板,该开发板作为一种标准的板子,支持各种上层组件和应用程序。 +
+ +## 硬件特点 ++ 性能 + + 中央处理器:RISC-V Dual Core 64bit, with FPU + + 图像识别:QVGA@60fps/VG@30fps + + 语音识别:麦克风阵列(8 mics) ++ 安全 + + 高级加密硬件加速器(AES) + + 一次性只读存储器(OTP)SHA256 ++ 功耗 + + 典型应用场景功耗 < 1W + + 芯片功耗 < 300mW ++ 扩展性 + + 操作系统:FreeRTOS + + 网络模型:TinyYOLOv2(after pruned) + + 深度学习框架:TensorFlow/Keras/Darknet + + 外设:FPIOA、UART、GPIO、SPI、I2C、I2S、WDT、TIMER、RTC等等 +### 更多信息 ++ [KD233](https://canaan-creative.com/product/kendryteai) + +## 支持的功能 +| 名称 | 控制器 | 驱动描述 | +| ---- | ---- | ---- | +|
CAMERA
| on-chip | camera驱动控制 | +|
DMA
| on-chip | dma驱动控制 | +|
GPIO
| on-chip | gpio 输入输出控制 | +|
I2C
| on-chip | i2c总线 | +|
I2S
| on-chip | i2s总线 | +|
LCD
| on-chip | lcd 液晶显示器控制 | +|
PLIC
| on-chip | 中断控制 | +|
SPI
| on-chip | spi总线驱动控制 | +|
SYS_CLOCK
| on-chip | 系统时钟控制 | +|
UART
| on-chip | uart串口驱动控制 | + +## 编程与调试 +针对**MAXGO**开发板的配置和刷新信息,详见[开发环境构建](/environment/bianyi.html) \ No newline at end of file diff --git a/docs/doc/hwsupport/stm32f407-st-discovery.md b/docs/doc/hwsupport/stm32f407-st-discovery.md new file mode 100644 index 0000000..e21e896 --- /dev/null +++ b/docs/doc/hwsupport/stm32f407-st-discovery.md @@ -0,0 +1,63 @@ +# stm32f407-st-discovery +## 综述 +
+
+ +
+

STM32F4DISCOVERY

+ + XiUOS最新分支支持stm32f407-st-discovery开发板,该开发板作为一种标准的板子,支持各种上层组件和应用程序。 +
+ +## 硬件特点 + ++ STM32F407VGT6 microcontroller featuring 32-bit ARM®Cortex®-M4 with FPU core, 1-Mbyte Flash memory, 192-Kbyte RAM in an LQFP100 package ++ On-board ST-LINK/V2 on STM32F4DISCOVERY (old reference) or ST-LINK/V2-A on STM32F407G-DISC1 (new order code) ++ USB ST-LINK with re-enumeration capability and three different interfaces: +

1. Debug port

+

2. Virtual Com port (with new order code only)

+

3. Mass storage (with new order code only)

++ Board power supply: through USB bus or from an external 5 V supply voltage ++ External application power supply: 3 V and 5 V ++ LIS302DL or LIS3DSH ST MEMS 3-axis accelerometer ++ MP45DT02 ST-MEMS audio sensor omni-directional digital microcontroller ++ CS43L22 audio DAC with integrated class D speaker driver ++ Eight LEDs: +

1. LD1 (red/green) for USB communication

+

2. LD2 (red) for 3.3 V power on

+

3. Four user LEDs, LD3 (orange), LD4 (green), LD5 (red) and LD6 (blue)

+

4. USB OTG LEDs LD7 (green) VBUS and LD8 (red) over-current

++ Two push-buttons (user and reset) ++ USB OTG FS with micro-AB connector ++ Extension header for all LQFP100 I/Os for quick connection to prototyping board and easy probing ++ Comprehensive free software including a variety of examples, part of STM32CubeF4 package or STSW-STM32068 to use legacy standard libraries. + +### 更多信息 ++ [STM32F4DISCOVERY](https://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-mpu-eval-tools/stm32-mcu-mpu-eval-tools/stm32-discovery-kits/stm32f4discovery.html#) + +## 支持的功能 +| 名称 | 控制器 | 驱动描述 | +| ---- | ---- | ---- | +|
DMA
| on-chip | DMA驱动控制 | +|
GPIO
| on-chip | gpio 输入输出控制 | +|
I2C
| on-chip | i2c 控制 | +|
LCD
| on-chip | lcd 液晶显示器控制 | +|
RTC
| on-chip | rtc 实时始终控制 | +|
SPI
| on-chip | spi 总线系统控制 | +|
TIMER
| on-chip | timer重置和计时控制 | +|
UART
| on-chip | uart串口驱动控制 | +|
USB
| on-chip | usb驱动控制 | +|
WATCHDOG
| on-chip | watchdog看门口控制 | + +## 编程与调试 +针对**stm32f407-st-discovery**开发板的配置和刷新信息,详见[开发环境构建](/environment/bianyi.html) + + \ No newline at end of file diff --git a/docs/doc/hwsupport/stm32f407zgt6.md b/docs/doc/hwsupport/stm32f407zgt6.md new file mode 100644 index 0000000..31f3e6e --- /dev/null +++ b/docs/doc/hwsupport/stm32f407zgt6.md @@ -0,0 +1,85 @@ +# stm32f407zgt6 +## 综述 +
+ +

STM32F407ZET6

+ + XiUOS最新分支支持stm32f407zgt6开发板,该开发板作为一种标准的板子,支持各种上层组件和应用程序。 +
+ +## 硬件特点 + ++ Core: Arm® 32-bit Cortex®-M4 CPU with FPU, Adaptive real-time accelerator (ART Accelerator) allowing 0-wait state execution from Flash memory, frequency up to 168 MHz, memory protection unit, 210 DMIPS/1.25 DMIPS/MHz (Dhrystone 2.1), and DSP instructions ++ Memories +

1. Up to 1 Mbyte of Flash memory

+

2. Up to 192+4 Kbytes of SRAM including 64-Kbyte of CCM (core coupled memory) data RAM

+

3. Up to 192+4 Kbytes of SRAM including 64-Kbyte of CCM (core coupled memory) data RAM

+

4. 512 bytes of OTP memory

+

5. Flexible static memory controller supporting Compact Flash, SRAM, PSRAM, NOR and NAND memories

++ LCD parallel interface, 8080/6800 modes ++ Clock, reset and supply management +

1. 1.8 V to 3.6 V application supply and I/Os

+

2. POR, PDR, PVD and BOR

+

3. 4-to-26 MHz crystal oscillator

+

4. Internal 16 MHz factory-trimmed RC (1% accuracy)

+

5. 32 kHz oscillator for RTC with calibration

+

6. Internal 32 kHz RC with calibration

++ Low-power operation +

1. Sleep, Stop and Standby modes

+

2. VBAT supply for RTC, 20×32 bit backup registers + optional 4 KB backup SRAM

++ 3×12-bit, 2.4 MSPS A/D converters: up to 24 channels and 7.2 MSPS in triple interleaved mode ++ 2×12-bit D/A converters ++ General-purpose DMA: 16-stream DMA controller with FIFOs and burst support ++ Up to 17 timers: up to twelve 16-bit and two 32-bit timers up to 168 MHz, each with up to 4 IC/OC/PWM or pulse counter and quadrature (incremental) encoder input ++ Debug mode +

1. Serial wire debug (SWD) & JTAG interfaces

+

2. Cortex-M4 Embedded Trace Macrocell™

++ Up to 140 I/O ports with interrupt capability +

1. Up to 136 fast I/Os up to 84 MHz

+

2. Up to 138 5 V-tolerant I/Os

++ Up to 15 communication interfaces +

1. Up to 3 × I2C interfaces (SMBus/PMBus)

+

2. Up to 4 USARTs/2 UARTs (10.5 Mbit/s, ISO 7816 interface, LIN, IrDA, modem control)

+

3. Up to 3 SPIs (42 Mbits/s), 2 with muxed full-duplex I2S to achieve audio class accuracy via internal audio PLL or external clock

+

4. 2 × CAN interfaces (2.0B Active)

+

5. SDIO interface

++ Advanced connectivity +

1. USB 2.0 full-speed device/host/OTG controller with on-chip PHY

+

2. USB 2.0 high-speed/full-speed device/host/OTG controller with dedicated DMA, on-chip full-speed PHY and ULPI

+

3. 10/100 Ethernet MAC with dedicated DMA: supports IEEE 1588v2 hardware, MII/RMII

++ 8- to 14-bit parallel camera interface up to 54 Mbytes/s ++ True random number generator ++ CRC calculation unit ++ 96-bit unique ID ++ RTC: subsecond accuracy, hardware calendar + + +### 更多信息 ++ [STM32F407ZET6](https://www.st.com/content/st_com/en/products/microcontrollers-microprocessors/stm32-32-bit-arm-cortex-mcus/stm32-high-performance-mcus/stm32f4-series/stm32f407-417/stm32f407ze.html) + +## 支持的功能 +| 名称 | 控制器 | 驱动描述 | +| ---- | ---- | ---- | +|
DMA
| on-chip | DMA驱动控制 | +|
GPIO
| on-chip | gpio 输入输出控制 | +|
I2C
| on-chip | i2c 控制 | +|
LCD
| on-chip | lcd 液晶显示器控制 | +|
RTC
| on-chip | rtc 实时始终控制 | +|
SPI
| on-chip | spi 总线系统控制 | +|
TIMER
| on-chip | timer重置和计时控制 | +|
UART
| on-chip | uart串口驱动控制 | +|
USB
| on-chip | usb驱动控制 | +|
WATCHDOG
| on-chip | watchdog看门口控制 | + +## 编程与调试 +针对**stm32f407zet6**开发板的配置和刷新信息,详见[开发环境构建](/environment/bianyi.html) + + \ No newline at end of file diff --git a/docs/doc/kernel.md b/docs/doc/kernel.md deleted file mode 100644 index 3658edf..0000000 --- a/docs/doc/kernel.md +++ /dev/null @@ -1 +0,0 @@ -# 内核 diff --git a/docs/doc/kernel/imagesrc/fifo_menuconfig.png b/docs/doc/kernel/imagesrc/fifo_menuconfig.png new file mode 100644 index 0000000..e6a3825 Binary files /dev/null and b/docs/doc/kernel/imagesrc/fifo_menuconfig.png differ diff --git a/docs/doc/kernel/imagesrc/fig1.png b/docs/doc/kernel/imagesrc/fig1.png new file mode 100644 index 0000000..fb00332 Binary files /dev/null and b/docs/doc/kernel/imagesrc/fig1.png differ diff --git a/docs/doc/kernel/imagesrc/fig2.png b/docs/doc/kernel/imagesrc/fig2.png new file mode 100644 index 0000000..48a27ce Binary files /dev/null and b/docs/doc/kernel/imagesrc/fig2.png differ diff --git a/docs/doc/kernel/imagesrc/fig3.png b/docs/doc/kernel/imagesrc/fig3.png new file mode 100644 index 0000000..c9540be Binary files /dev/null and b/docs/doc/kernel/imagesrc/fig3.png differ diff --git a/docs/doc/kernel/imagesrc/fig9.png b/docs/doc/kernel/imagesrc/fig9.png new file mode 100644 index 0000000..918bef3 Binary files /dev/null and b/docs/doc/kernel/imagesrc/fig9.png differ diff --git a/docs/doc/kernel/imagesrc/rr_menuconfig.png b/docs/doc/kernel/imagesrc/rr_menuconfig.png new file mode 100644 index 0000000..ea05613 Binary files /dev/null and b/docs/doc/kernel/imagesrc/rr_menuconfig.png differ diff --git a/docs/doc/kernel/imagesrc/schedule.png b/docs/doc/kernel/imagesrc/schedule.png new file mode 100644 index 0000000..6e2882a Binary files /dev/null and b/docs/doc/kernel/imagesrc/schedule.png differ diff --git a/docs/doc/kernel/imagesrc/thread_status.jpg b/docs/doc/kernel/imagesrc/thread_status.jpg new file mode 100755 index 0000000..1c0eb61 Binary files /dev/null and b/docs/doc/kernel/imagesrc/thread_status.jpg differ diff --git a/docs/doc/kernel/mm.md b/docs/doc/kernel/mm.md new file mode 100644 index 0000000..c91562f --- /dev/null +++ b/docs/doc/kernel/mm.md @@ -0,0 +1,379 @@ +# 内存管理 + +## 前言 +计算机系统中,变量、中间数据一般存放在 RAM 中,只有在实际使用时才将它们从 RAM 调入到 CPU 中进行运算。一些数据需要的内存大小需要在程序运行过程中根据实际情况确定,这就要求系统具有对内存空间进行动态管理的能力,在用户需要一段内存空间时,向系统申请,系统选择一段合适的内存空间分配给用户,用户使用完毕后,再释放回系统,以便系统将该段内存空间回收再利用。
+ +由于实时系统中对时间的要求非常严格,内存管理往往要比通用操作系统要求苛刻得多: +

+1)分配内存的时间必须是确定的。一般内存管理算法是根据需要存储的数据的长度在内存中去寻找一个与这段数据相适应的空闲内存块,然后将数据存储在里面。而寻找这样一个空闲内存块所耗费的时间是不确定的,因此对于实时系统来说,这就是不可接受的,实时系统必须要保证内存块的分配过程在可预测的确定时间内完成,否则实时任务对外部事件的响应也将变得不可确定。 +

+2)随着内存不断被分配和释放,整个内存区域会产生越来越多的碎片,系统中还有足够的空闲内存,但因为它们地址并非连续,不能组成一块连续的完整内存块,会使得程序不能申请到大的内存。对于通用系统而言,这种不恰当的内存分配算法可以通过重新启动系统来解决,但是对于那些需要常年不间断地工作于野外的嵌入式系统来说,频繁的重启是无法接受的。 +

+3)嵌入式系统的资源环境也是不尽相同,不同的系统内存大小不同,如何为这些不同的系统,选择适合它们的高效率的内存分配算法,也是一个复杂的问题。 +

+XiUOS操作系统提供了独特的内存管理分配算法进行内存管理,通过静态内存管理和动态内存管理相结合,保证分配和释放内存的实时性,提高内存的使用率,有效地规避了内存碎片问题,同时增加了内存检索的速度。 +

+ +## 内存堆 +### 静态内存管理 +#### 静态内存划分 +静态内存包含2个链表。其中,每个链表都具有block_size静态内存块大小、total_count静态内存块的总个数、free_count空闲内存块的总个数和free_list空闲链表这四个属性。 +其中block_size属性记录了当前链表中每个静态内存块的大小, +total_count属性记录了系统初始化之后分配给该链表中静态内存块的总个数, +free_count属性记录了该链表中还可以分配给用户静态内存块的个数, +free_list属性则真正指向各个空闲静态内存块。 +

+下图为静态内存链表的具体情况。图中包括两个静态链表1和2。静态链表头1指向的内存池中存放的静态内存块的大小都是32字节,静态链表头2所指向的内存池中存放的静态内存块的大小都是64字节。此外,系统分别配置了静态链表头1和静态链表头2中静态内存块的total_count个数为256和128。因此,静态链表头1最多可以响应用户256次的小于32字节的内存请求,静态链表头2最多可以响应用户128次的介于33-64字节之间的内存请求,一旦对应的静态内存块分配完了,系统会向动态内存区域寻求内存空间分配。 + +
+ +
+ +#### 静态内存分配 +在用户发起内存分配请求时,若用户请求分配的内存空间大小小于等于预设的静态内存阈值,且所述静态内存区域有相应空闲的内存块,则从静态内存区域分配相应大小的内存空间。 +

+在用户发起内存释放请求时,所述分配释放请求解析根据用户提供的内存地址决定后续的操作: +
+如果所述内存地址是不合法的,则直接返回结果给用户。 +
+如果所述内存地址是合法地址,分配释放请求解析模块解析所述内存地址所属内存区域,所述内存地址在静态内存区域,则内存分配任务由静态内存管理模块负责;所述内存地址在动态内存区域,则内存分配任务由动态内存管理模块负责。 +

+ +从静态内存区域分配静态内存块的过程,包括三种情况。
++ 当用户请求分配内存大小小于等于32字节,那么分配释放请求解析模块解析该内存大小由静态内存管理模块负责。系统获取静态链表头1,从静态链表头1中获取一个静态内存块返回给用户;
++ 当用户请求分配内存大小为33~64字节,那么分配释放请求解析模块解析该内存大小由静态内存管理模块负责。系统获取静态链表头2,从静态链表头2中获取一个静态内存块返回给用户;
++ 若所获得的静态链表头是一个空的链表,即没有空闲的静态内存块可用,那么通知分配释放请求解析模块在静态内存区域中内存分配失败。 + +#### 静态内存释放 +当用户请求释放内存,所述内存用ptr表示,释放操作包括三种情况。
++ 所述ptr内存地址是不合法的,则直接返回释放操作。
++ 所述ptr指向的静态内存块属于静态链表头1管理,则将所述ptr指向的静态内存块放置到链表头1的头部;
++ 若所述ptr指向的静态内存块属于链表头2管理,则将所述ptr指向的静态内存块放置到链表头2的头部。 + +### 动态内存管理 +#### 动态内存划分 +静态内存划分后,剩下的内存区域作为动态内存分配给动态内存区域。动态内存区域管理用到了三种重要的数据结构,分别是已分配动态内存段、空闲动态内存段和动态内存管理数据结构。下图显示了已分配动态内存段和空闲动态内存段这两种数据结构。其中,已分配动态内存包括元数据信息和用户的数据段(用户数据),元数据信息中的size属性记录了该动态内存段的内存大小,prev_size属性则记录了该动态内存段前一个相邻动态内存段的内存大小,从而可以获取前一个相邻动态内存段。用户数据则是分配给用户使用的内存空间。空闲动态内存段的元数据信息具有size、prev_size、prev和next这四个属性,其中,size和prev_size属性与已分配动态内存段的对应属性表示的意义相同,prev属性记录了前一个空闲动态内存段,最后一个next属性则记录了下一个空闲动态内存段。 +

+
+ +
+

+下图展示了动态内存区域初始化之后的状态,系统将动态内存区域划分为三个动态内存段,分别是起始地址处已分配动态内存段和结尾已分配动态内存段,中间区域的内存用一个空闲动态内存段记录。 +

+
+ +
+

+动态内存管理数据结构是动态内存区域管理中的核心数据结构,用于组织所有的空闲动态内存段。所述动态内存管理数据结构具有total_size、dynamic_start、dynamic_end和freeLists这四个属性,其中,total_size属性用于记录动态内存区域的大小,dynamic_start属性用于记录起始地址处已分配动态内存段,dynamic_end属性用于记录结尾处已分配动态内存段,freeLists属性是一个多级链表,每一级链表记录了内存大小在指定范围的空闲动态内存段。根据空闲内存段的大小,系统判断空闲内存段所属动态链表,然后将空闲内存段插入不同的空闲链表中。

+系统配置空闲链表的个数为10。当动态内存段大小在1-31字节之间,则插入到空闲链表freeList1中,当动态内存段大小在32-63字节之间时,则插入到空闲链表freeList2中,需要特别说明的是,当动态内存段大小大于或者等于8192字节时,都插入到空闲链表freeList10中。如下表所示: + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ 申请的内存范围 + + 分配动态链表头 +
+ 1 ~ 31字节 + + freeList1 +
+ 32 ~ 63字节 + + freeList2 +
+ 64 ~127字节 + + freeList3 +
+ …… + + …… +
+ 8192 ~MAX(MAX由系统配置) + + freeList10 +
+
+ + +#### 动态内存分配 +系统根据要分配或者要释放的内存段大小计算要操作的内存段链表头,当内存段大小为1 ~ 31字节,那么内存计算单元计算之后将获取空闲动态链表头freeList1,当内存段大小为32 ~63字节,那么内存计算单元计算之后将获取动态链表头freeList2。以此类推。

+当用户请求从动态内存段申请内存时,动态内存管理模块只能有以下几种分配情况:
++ 用户请求分配30个字节,freeList1链表中有一个32字节内存大小可以满足用户的需求,之后进行内存块的分割操作,32可以分配为30字节 + 2字节,但是2字节小于系统要求的8字节对齐大小,因此将32字节内存返回给用户;
++ 用户请求分配45个字节,并且系统已经知道静态内存区域无法分配。内存计算单元计算45字节对应的空闲动态链表,获取freeList2,freeList2链表中有一个56字节内存大小可以满足用户的需求,之后进行内存块的分割操作,56可以分配为45字节 + 11字节,11字节小于系统要求的8字节对齐大小,因此,除了返回45字节动态内存给用户,还要执行11字节的内存释放操作;
++ 用户请求分配8000个字节。内存计算单元计算8000字节对应的空闲动态链表,获取freeList9,freeList9链表中没有空闲动态内存段,没有找到可分配的动态内存段并且freeList9不是最后一级链表,更新链表头到freeList10,freeList10链表中动态内存段可以满足用户的需求,之后进行内存块的分割操作,9000可以分配为8192字节 + 808字节,808字节大于系统要求的8字节对齐大小,因此,除了返回8192动态内存给用户,还要执行808字节的释放操作;
++ 用户请求分配6000000个字节。内存计算单元计算6000000字节对应的空闲动态链表,获取freeList10,freeList10链表中没有空闲动态内存段,没有找到可分配的动态内存段并且freeList10是最后一级链表,内存分配操作失败,结束内存分配操作。
+ +#### 动态内存释放 +当用户请求释放内存,所述内存用ptr表示。分配释放请求解析模块解析判断ptr所述区域为动态内存区域,则将释放ptr所指向的内存区域到动态内存段中。 + +
+ +
+ +释放一块动态内存段,上图提供了动态内存段释放和合并的三种情况,其中,每一个动态内存段都包含了两个指针,分别指向前一个相邻内存段和后一个相邻内存段,下面介绍图9展示的三种释放并合并的三种情况: ++ 如图中(a)所示,四块动态内存段,其中,A,B,D三段为已分配动态内存段,C为空闲动态内存段。当前,系统要释放内存段B,动态内存管理模块检测到B内存段的后一个相邻C也是空闲内存段,则系统会合并内存段B,C,然后释放BC合并之后的内存段。 ++ 如图中(b)所示,A,B,C,D四块已分配内存段。系统要释放内存段B,动态内存管理模块检测到B的相邻内存段都是已分配内存段,那么直接释放内存段B。 ++ 如图中(c)所示,四块动态内存段,其中,A,C是空闲内存段,B,D是已分配内存段。系统要释放内存段B,动态内存管理模块检测到B的前一个相邻内存段A和后一个相邻内存段B都是空闲内存段,那么先合并A,B,C三个内存段形成一个大的空闲内存段ABC,然后释放合并形成的ABC空闲内存段。 + +## 内存池 +内存堆管理器可以分配任意大小的内存块,非常灵活和方便。但其也存在明显的缺点:一是分配效率不高,在每次分配时,都要空闲内存块查找;二是容易产生内存碎片。为了提高内存分配的效率,并且避免内存碎片,XiUOS提供了另外一种内存管理方法:内存池。 +

+内存池在创建时先向系统预先申请分配一定数量、大小相等(一般情况下)的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存。 + +## 函数接口 + +### 内存堆管理 + +#### 内存初始化 +```C +void xs_SystemHeapInit(void *start_phy_address, void *end_phy_address) +``` +这个函数用来初始化静态和动态内存。 + + +| 参数 | 描述 | +| :------ | :------ | +| start_phy_address | 内存开始的物理地址 | +| end_phy_address | 内存结束的物理地址 | +
+ + +#### 分配和释放内存 +```C +void *xs_malloc(xs_size_t size) +``` +这个函数用来分配一块合适大小的内存,如果分配成功,则返回分配内存的首地址;如果分配失败,则返回NULL。 + + +| 参数 | 描述 | +| :------ | :------ | +| size | 需要被分配的内存大小 | +
+ +```C +void *xs_realloc(void *pointer, xs_size_t size) +``` +这个函数用来重新分配一块内存,将原内存块中的数据保存到新的内存中去,并将原内存块释放。如果分配成功,则返回分配内存的首地址;如果分配失败,则返回NULL。 + + +| 参数 | 描述 | +| :------ | :------ | +| pointer | 原内存块的指针 | +| size | 需要被分配的内存大小 | +
+ +```C +void *xs_calloc(xs_size_t count, xs_size_t size) +``` +这个函数会分配多个内存块并将内存块中的数据初始化为0。 + + +| 参数 | 描述 | +| :------ | :------ | +| count | 需要分配的内存块数量 | +| size | 单个内存块的大小 | +
+ + +```C +void xs_free(void *pointer) +``` +这个函数用来释放一个内存块 + + +| 参数 | 描述 | +| :------ | :------ | +| pointer | 指向需要被释放的内存块的指针 | +
+ +#### 内存钩子函数 +```C +void xs_MallocSetHook(void (*MallocHook)(void *pointer, xs_size_t size)) +``` +这个函数设置了一个 MallocHook 函数,MallocHook 函数会在动态内存分配之前调用。 + + +| 参数 | 描述 | +| :------ | :------ | +| MallocHook | MallocHook 函数指针 | +
+ +```C +void xs_FreeSetHook(void (*FreeHook)(void *pointer)) +``` +这个函数设置了一个FreeHook 函数, FreeHook 函数会在内存块被释放回动态内存区时调用。 + + +| 参数 | 描述 | +| :------ | :------ | +| FreeHook | FreeHook 函数指针 | +
+ +#### 其他函数 +```C +void xs_MemoryInfo(xs_uint32 *total_memory, xs_uint32 *used_memory, xs_uint32 *max_used_memory) +``` +这个函数用于获取内存的统计信息。 + + +| 参数 | 描述 | +| :------ | :------ | +| total_memory | 内存总量 | +| used_memory | 已使用的内存 | +| max_used_memory | 最大分配内存 | +
+ +```C +void list_mem(void) +``` +打印内存信息。 + +
+ +```C +void list_buddy(void) +``` +打印动态内存中的空闲节点信息。 + +
+ +### 内存池 + +#### 创建内存池 +```C +xs_gm_t xs_CreateMemGather(const char *gm_name, xs_size_t block_number, xs_size_t one_block_size) +``` +创建一个内存池。如果创建成功,返回第一个内存块的地址,否则返回XS_NULL(0)。 + +| 参数 | 描述 | +| :------ | :------ | +| gm_name | 内存池名 | +| block_number | 内存池中的内存块数量 | +| one_block_size | 每个内存块的容量 | +
+ +```C +xs_err_t xs_InitMemGather(struct xs_MemGather *gm_handler, const char *gm_name, void *begin_address, xs_size_t gm_size, xs_size_t one_block_size) +``` +初始化内存池,用于静态内存管理模式。 + +| 参数 | 描述 | +| :------ | :------ | +| gm_handler | 内存池对象 | +| gm_name | 内存池名称 | +| begin_address | 内存池起始地址 | +| gm_size | 内存池数据区大小 | +| one_block_size | 每个内存块的容量 | +
+ +#### 删除内存池 +```C +xs_err_t xs_DeleteMemGather(xs_gm_t gm_handler) +``` +删除由xs_CreateMemGather创建的内存池,返回0。 + +| 参数 | 描述 | +| :------ | :------ | +| gm_handler | 需要被删除的内存池地址 | + +
+ +```C +xs_err_t xs_RemoveMemGather(struct xs_MemGather *gm_handler) +``` +删除由xs_MemGatherInit创建的内存池,返回0。 + +| 参数 | 描述 | +| :------ | :------ | +| gm_handler | 需要被删除的内存池地址 | + +
+ +#### 分配内存块 +```C +void *xs_AllocBlockMemGather(xs_gm_t gm_handler, xs_int32 wait_time) +``` +该函数将从指定的内存池中分配一个内存块。如果内存池中有可用的内存块,则从内存池的空闲块链表上取下一个内存块,将空闲内存块数目减1并返回这个内存块;如果内存池中已经没有空闲内存块,则判断超时时间设置:若超时时间设置为零,则立刻返回空内存块;如果等待时间大于零,则把当前线程挂起在该内存池对象上,直到内存池中有可用的自由内存块,或等待时间到达。 + +| 参数 | 描述 | +| :------ | :------ | +| gm_handler | 内存池对象 | +| wait_time | 超时时间 | + +
+ + +#### 释放内存块 +```C +void xs_FreeBlockMemGather(void *data_block) +``` +这个函数用于释放指定的内存块,然后增加内存池对象的可用内存块数目,并把该被释放的内存块加入空闲内存块链表上。接着判断该内存池对象上是否有挂起的线程,如果有则唤醒挂起线程链表上的首线程。 + +| 参数 | 描述 | +| :------ | :------ | +| data_block | 需要被释放的内存块指针 | + +
+ +#### 内存池钩子函数 +```C +void xs_GmSetAllocHook(void (*gm_allocation_hook)(struct xs_MemGather *gm, void *date_ptr)) +``` +该钩子函数会在内存池分配之前调用。 + + +| 参数 | 描述 | +| :------ | :------ | +| MallocHook | 钩子函数指针 | +
+ +```C +void xs_GmSetFreeHook(void (*gm_release_hook)(struct xs_MemGather *gm, void *date_ptr)) +``` +该钩子函数会在内存池被删除后调用。 + + +| 参数 | 描述 | +| :------ | :------ | +| gm_release_hook | 钩子函数指针 | +
+ +## 应用场景 +### 内存堆应用场景 ++ 为数组动态分配内存的常规场景。 + +**优点:** 能够实时分配和释放内存
+**缺点:** 容易产生碎片 + +### 内存池应用场景 ++ 当线程间以信号通信时,在发送和接收信号前,可以初始化一个内存池储存信号。 ++ Wifi 模块运行动态储存接收数据。 + +**优点:** 增加了内存动态分配的效率,提高内存的使用率,减少内存碎片的产生。 +## 应用示例 diff --git a/docs/doc/kernel/synchron.md b/docs/doc/kernel/synchron.md new file mode 100755 index 0000000..3ba5e03 --- /dev/null +++ b/docs/doc/kernel/synchron.md @@ -0,0 +1 @@ +# 资源管理 diff --git a/docs/doc/kernel/task.md b/docs/doc/kernel/task.md new file mode 100755 index 0000000..dfc369a --- /dev/null +++ b/docs/doc/kernel/task.md @@ -0,0 +1 @@ +# 线程管理 diff --git a/docs/doc/kernel/threadcommunication.md b/docs/doc/kernel/threadcommunication.md new file mode 100644 index 0000000..dee0380 --- /dev/null +++ b/docs/doc/kernel/threadcommunication.md @@ -0,0 +1,378 @@ +# 线程间通信 +XiUOS 的线程间通信使用邮箱、消息队列和信号三种方式。下面将分别介绍。 + +## 邮箱 +### 邮箱的工作机制 +XiUOS 的每一封邮件大小为4字节,也就是一个指针的大小。典型的邮箱应用是,线程或中断服务发送一封4字节长度的邮件到邮箱中,其他的线程可以从邮箱中接收邮件并进行处理。

+当一个线程向邮箱发送邮件时,如果邮箱没满,就将邮件复制到邮箱中。如果邮箱满了并且超时时间设置为0,则返回`-XS_EFULL`;如果超时时间不为0,先将该发送线程挂起,当邮箱中的邮件被取出空出空间后,等待挂起的发送线程被唤醒继续发送。但是如果到达超时时间仍没有空间,则返回`-XS_EFULL`。

+当一个线程从邮箱中接收邮件时,如果邮箱中有邮件,就读出该邮件的内容,并返回XS_EOK。如果邮箱中没有邮件并且超时设置为0,则返回`-XS_ETIMEOUT`;如果超时时间不为0,则将该线程挂在邮箱的等待线程中,有邮件时唤醒。但是如果到达超时时间仍没有邮件,返回`-XS_ETIMEOUT`。 +### 结构体定义和函数接口 + +#### 邮箱控制块 +```C +struct xs_Mailbox +{ + char name[XS_NAME_MAX]; + xs_uint8 style; + + xs_uint8 sign; + + xs_list_t link; + + xs_list_t pend_list; + + xs_ubase *msg_buf; + xs_uint16 size; + xs_uint16 index; + xs_uint16 in_offset; + xs_uint16 out_offset; + + xs_list_t pend_sender_list; +}; + +typedef struct xs_Mailbox *xs_mailbox_t; +``` +| 参数 | 描述 | +| ------ | ------ | +| name | 邮箱名称 | +| style | 线程等待的方式,可以取FIFO或PRIO | +| sign | 标记邮箱的创建方式,静态创建或动态创建 | +| link | 邮箱存放的列表 | +| pend_list | 线程等待队列 | +| msg_buf | 邮箱缓冲区开始地址 | +| size | 邮箱最大容纳的邮件数 | +| index | 邮箱中邮件的索引 | +| in_offset | 邮箱缓冲的进指针 | +| out_offset | 邮箱缓冲的出指针 | +| pend_sender_list | 发送线程的挂起等待队列 | + +#### 函数接口 + +```C +xs_err_t xs_InitMailbox(xs_mailbox_t mb, + const char* name, + void* msgpool, + xs_size_t size, + xs_uint8 flag); +``` +该函数用于创建一个静态邮箱对象,并将它加入邮箱管理列表中,创建成功返回`XS_OK`。
+| 参数 | 描述 | +| ------ | ------ | +| mb | 邮箱对象 | +| name | 邮箱名称 | +| msgpool | 缓冲区指针 | +| size | 邮箱容量 | +| flag | 线程等待的方式,可以取FIFO或PRIO | +
+ +```C +xs_err_t xs_DetachMailbox(xs_mailbox_t mb); +``` +该函数用于脱离静态初始化的邮箱对象。该函数唤醒所有挂在该邮箱上的线程,然后将该邮箱从邮箱存放的列表中脱离,返回`XS_OK`。 +| 参数 | 描述 | +| ------ | ------ | +| mb | 邮箱对象 | + +```C +xs_mailbox_t xs_CreateMailbox(const char *name, xs_size_t size, xs_uint8 flag); +``` +该函数用于创建一个动态邮箱对象,并将它加入邮箱管理列表中。创建成功则返回`XS_OK`,创建失败返回`XS_NULL`。
+| 参数 | 描述 | +| ------ | ------ | +| name | 邮箱名称 | +| size | 邮箱容量 | +| flag | 线程等待的方式,可以取FIFO或PRIO | +
+ +```C +xs_err_t xs_DeleteMailbox(xs_mailbox_t mb); +``` +该函数用于删除动态邮箱对象。先唤醒挂在邮箱对象上的所有线程,然后释放该邮箱的使用内存,最后删除邮箱对象。返回`XS_OK`。
+| 参数 | 描述 | +| ------ | ------ | +| mb | 邮箱对象 | +
+ +```C +xs_err_t xs_MailboxSendWait(xs_mailbox_t mb, xs_ubase value, xs_int32 timeout); +``` +该函数用于发送邮件。如果邮箱满了并且过了timeout时间仍然没有空位,则返回`-XS_FULL`;否则将邮件存放入邮箱。
+| 参数 | 描述 | +| ------ | ------ | +| mb | 邮箱对象 | +| value | 邮件内容 | +| timeout | 超时时间 | +
+ +```C +xs_err_t xs_MailboxSend(xs_mailbox_t mb, xs_ubase value); +``` +该函数用于发送邮件。与`xs_MailboxSendWait`唯一不同的地方是,该函数的`timeout == 0`。
+| 参数 | 描述 | +| ------ | ------ | +| mb | 邮箱对象 | +| value | 邮件内容 | +
+ +```C +xs_err_t xs_MailboxRecv(xs_mailbox_t mb, xs_ubase *value, xs_int32 timeout); +``` +该函数用于接受邮件。 + +```C +xs_err_t xs_CmdControlMailbox(xs_mailbox_t mb, int cmd, void *arg); +``` +该函数用于获取或设置邮箱的其他属性。目前当`cmd == XS_LINKLIST_CMD_RESET`时,重新初始化邮箱。
+| 参数 | 描述 | +| ------ | ------ | +| mb | 邮箱对象 | +| cmd | 需要执行的命令 | +| arg | 命令的参数 | +
+ +## 消息队列 +### 消息队列的工作机制 +消息队列能够接收线程或中断产生的不固定长度的消息,并储存到自己的内存空间中。其他线程可以从消息队列中读取相应的消息。当消息队列为空时,挂起读取线程,当有新的消息到达时,唤醒读取线程进行读取。 +### 结构体定义和函数接口 +#### 结构体定义 +```C +struct xs_MessageQueue +{ + char name[XS_NAME_MAX]; + xs_uint8 style; + + xs_uint8 sign; + + + xs_list_t link; + + xs_list_t pend_list; + + void *msg_buf; + + xs_uint16 size; + xs_uint16 max_msgs; + + xs_uint16 index; + + void *mq_listhead; + void *mq_listtail; + void *mq_free; + + xs_list_t pend_sender_thread; +}; +typedef struct xs_MessageQueue *xs_messagequeue_t; +``` +| 参数 | 描述 | +| ------ | ------ | +| name | 消息队列名称 | +| style | 线程等待的方式,可以取FIFO或PRIO | +| sign | 标记消息队列的创建方式,静态创建或动态创建 | +| link | 消息队列存放的列表 | +| pend_list | 线程等待队列 | +| msg_buf | 存放消息的缓存区 | +| size | 缓存区大小 | +| max_msgs | 一条消息的最大长度 | +| index | 当前消息数 | +| mq_listhead | 消息链表头 | +| mq_listtail | 消息链表尾 | +| mq_free | 空闲消息链表 | +| pend_sender_thread | 发送线程的挂起等待队列 | + + +#### 函数接口 +```C +xs_err_t xs_InitMessageQueue(xs_messagequeue_t mq, + const char *name, + void *msgpool, + xs_size_t msg_size, + xs_size_t pool_size, + xs_uint8 flag) +``` +该函数用于初始化一个静态消息队列,并将它加入消息队列管理列表中。创建成功后返回`XS_OK`。
+| 参数 | 描述 | +| ------ | ------ | +| mq | 消息队列对象指针 | +| name | 消息队列名称 | +| msgpool | 指向存放消息的内存空间的指针 | +| msg_size | 一条消息的最大长度 | +| pool_size | 存放消息的内存区大小 | +| flag | 消息队列采用的等待方式,可取FIFO或PRIO | +
+ +```C +xs_err_t xs_DetachMessageQueue(xs_messagequeue_t mq) +``` +该函数用于将一个静态消息队列从消息队列管理列表中移除。移除成功则返回`XS_OK`。
+| 参数 | 描述 | +| ------ | ------ | +| mq | 消息队列对象指针 | +
+ +```C +xs_messagequeue_t xs_CreateMessageQueue(const char *name, + xs_size_t msg_size, + xs_size_t max_msgs, + xs_uint8 flag) +``` +该函数用于动态创建一个消息队列,并将消息队列加入消息队列管理列表。
+| 参数 | 描述 | +| ------ | ------ | +| name | 消息队列名称 | +| msg_size | 缓冲区的大小 | +| max_msgs | 一条消息的最大长度 | +| flag | 消息队列采用的等待方式,可取FIFO或PRIO | +
+ +```C +xs_err_t xs_DeleteMessageQueue(xs_messagequeue_t mq) +``` +该函数用于将由`xs_CreateMessageQueue`创建的消息队列从消息队列管理列表中删除。
+| 参数 | 描述 | +| ------ | ------ | +| mq | 消息队列对象指针 | +
+ +```C +xs_err_t xs_MessageQueueSendwait(xs_messagequeue_t mq, + const void *buffer, + xs_size_t size, + xs_int32 timeout) +``` +发送消息时,消息队列对象先从空闲消息链表上取下一个空闲消息块,把线程或者中断服务程序发送的消息内容复制到消息块上,然后把该消息块挂到消息队列的尾部,成功则返回`XS_EOK`。如果消息长度大于最大长度,则返回`XS_ERROR`。如果消息队列满了,则根据超时时间设定进行等待,超时则返回`-XS_EFULL`。
+ +| 参数 | 描述 | +| ------ | ------ | +| mq | 消息队列对象指针 | +| buffer | 消息内容 | +| size | 消息大小 | +| timeout | 超时时间 | +
+ +```C +xs_err_t xs_MessageQueueSend(xs_messagequeue_t mq, const void *buffer, xs_size_t size) +``` +该函数是timeout为0的`xs_MessageQueueSendwait`。 +
+ +| 参数 | 描述 | +| ------ | ------ | +| mq | 消息队列对象指针 | +| buffer | 消息内容 | +| size | 消息大小 | +
+ +```C +xs_err_t xs_MessageQueueUrgentSend(xs_messagequeue_t mq, const void *buffer, xs_size_t size) +``` + +发送紧急消息和发送普通消息的区别是:当发送紧急消息时,从空闲消息链表上取下来的消息块不是挂到消息队列的队尾,而是挂到队首,这样,接收者就能够优先接收到紧急消息,从而及时进行消息处理。
+ +| 参数 | 描述 | +| ------ | ------ | +| mq | 消息队列对象指针 | +| buffer | 消息内容 | +| size | 消息大小 | +
+ +```C +xs_err_t xs_MessageQueueReceive(xs_messagequeue_t mq, + void *buffer, + xs_size_t size, + xs_int32 timeout) +``` +当队列中有消息时,接收消息。队列中没有消息时,根据超时时间设定进行等待。接收一个消息后消息队列上的队首消息被转移到了空闲消息链表的尾部。成功收到消息返回`XS_EOK`,超时返回`XS_ETIMEOUT`。接收消息失败返回`-XS_ERROR`。 +
+ +| 参数 | 描述 | +| ------ | ------ | +| mq | 消息队列对象指针 | +| buffer | 消息内容 | +| size | 消息大小 | +| timeout | 超时时间 | +
+ +```C +xs_err_t xs_CmdControlMessageQueue(xs_messagequeue_t mq, int cmd, void *arg) +``` +该函数用于获取或设置消息队列的其他属性。目前当cmd == XS_LINKLIST_CMD_RESET时,重新初始化消息队列。 +
+ +| 参数 | 描述 | +| ------ | ------ | +| mq | 消息队列对象指针 | +| cmd | 需要执行的命令 | +| arg | 命令的参数 | +
+ + +## 信号 +### 信号的工作机制 +信号是在软件层次对中断机制的一种模拟。XiUOS中提供了信号用作异步通信的方式。

+收到信号的线程对各种信号有不同的处理方法,处理方法可以分为三类:

+第一种是类似中断的处理程序,对于需要处理的信号,线程可以指定处理函数,由该函数来处理。

+第二种方法是,忽略某个信号,对该信号不做任何处理。

+第三种方法是,对该信号的处理保留系统的默认值。

+具体来说,假设其他线程要向线程1通信,则在线程1中安装一个信号并解除阻塞,在安装的同时,规定对该信号的异常处理方式。其他线程给线程1发送信号,触发线程1对该信号的处理。 +### 函数接口 +```C +xs_sighandler_t xs_InstallSignal(int signo, xs_sighandler_t handler) +``` +该函数用于给当前线程安装一个新的信号。
+ +| 参数 | 描述 | +| ------ | ------ | +| signo | 信号值 | +| handler | 设置对信号值的处理方式,可以是用户自定义的函数,`SIG_IGN`或`SIG_DFL` | +
+ +handler的值为`SIG_IGN`时,忽略该信号;
+handler的值为`SIG_DFL`时,执行信号默认处理函数`_SignalDefaultHandler`;
+handler为函数句柄时,执行用户函数。
+ +```C +void xs_MaskSignal(int signo) +``` +该函数用于屏蔽一个信号。
+ +| 参数 | 描述 | +| ------ | ------ | +| signo | 信号值 | +
+ +```C +void xs_UnmaskSignal(int signo) +``` +该函数用于解除对一个信号的屏蔽。
+ +| 参数 | 描述 | +| ------ | ------ | +| signo | 信号值 | +
+ +```C +int xs_WaitSignal(const xs_sigset_t *set, xs_siginfo_t *si, xs_int32 timeout) +``` +等待`set`信号到来。如果没等到这个信号,则将该线程挂起直到等到信号或超过超时时间。如果等到信号,则将`set`信号指针存入`si`。
+ +| 参数 | 描述 | +| ------ | ------ | +| set | 指定等待的信号 | +| set | 指向存储等到信号信息的指针 | +| set | 超时时间 | +
+ +```C +int xs_KThreadKill(TaskDescriptorPointer tid, int sig) +``` +该函数用于给线程`tid`发送信号`sig`。
+ +| 参数 | 描述 | +| ------ | ------ | +| tid | 线程 | +| sig | 信号值 | + +```C +int xs_SysInitSignal(void) +``` +该函数用于在内存池中给信号分配一片内存区。 \ No newline at end of file diff --git a/docs/doc/sensor/force_sensor.md b/docs/doc/sensor/force_sensor.md new file mode 100644 index 0000000..a4c4f72 --- /dev/null +++ b/docs/doc/sensor/force_sensor.md @@ -0,0 +1,584 @@ +# 力敏传感器 + +## QS-FS 风速传感器 + +
+ + + + + +
+ + QS-fs + + + 体积小,携带方便、安装简捷

+ 测量精度高,量程宽,稳定性好

+ 结构设计合理,外观质量佳

+ 数据信息线性度好,信号传输距离长,抗外界干扰能力强

+
+
+ +### 适用范围 +该传感器可广泛应用于温室、环境保护、气象站、船舶、 码头、养殖等环境的风速测量。 +### 接线说明 + +**电压、电流以及脉冲型接线定义** +
+ + + + + + + + + + + + + + + + + + + + + +
接入外部线
电源正红色棕色
电源负蓝色黑色
信号黄色蓝色
+
+ +**485型接线定义** +
+ + + + + + + + + + + + + + + +
线色棕色蓝色灰色黑色
485电源正485A485B电源负
+
+ +### 技术参数 +启动风力:0.2-0.4 m/s

+测量精度:±(0.3+0.03V)m/s(V表示风速示值)

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
电压型量程0~32. 4 m/s
供电电压7V~24 V DC
输出信号0.4~2V
风速值(输出电压-0.4)/1.6*32.4
供电电压12V~24 V DC
输出信号0~5 V
风速值输出电压/5*32.4
供电电压12V~24 V DC
输出信号1~5 V
风速值(输出电压-1)/4*32.4
电流型量程0~32. 4 m/s
供电电压12V~24 V DC
输出信号4~20 mA
负载能力≤200Ω
风速值(输出电流-4)/16*32.4
脉冲型量程0~60 m/s
供电电压12V~24 V DC
输出信号脉冲(每个脉冲对应0.88m/s)
信号说明内加上拉电阻逻辑1=VCC,逻辑0=GND
485型量程0~32. 4 m/s
供电电压 7V~24 V DC
通信协议Modbus-RTU
+
+ +### 通信协议 +**MODBUS协议(可定制)** ++ 通讯方式:485 通讯,传送距离< 1000米 ++ 通讯速率:9600,n,8,1 ++ 通讯协议:MODBUS-RTU协议,出厂站号为2号站,依需要可以进行修改。 +ModBus协议的命令包括:
+读出风速的数值(出厂为2号站)
+读取风速值命令格式举例:
+ +
+ + + + + + + + + + + + + + + + + + + + + +
01234567
0x020x030x000x000x000x010x840x39
+
+ +注:开始的第一个字节02是站号,如果你已修改过站号设置,应将第一位的 02 修改为您设置的站号,最后两位84,39是 16位的CRC校验。
+返回风速的命令格式举例:
+ +
+ + + + + + + + + + + + + + + + + + + +
0123456
0x020x030x020x000x1F0xBD0x8C
+
+注:001F所在的位4,5位为风速的值,客户自行计算CRC校验是否正确。
+风速数据解析方法:
+风速(m/s)=0X001F/10=31/10=3.1
+修改自身站号
+方法一:知道现在站号,发送如下指令
+ +
+ + + + + + + + + + + + + + + + + + + + + +
01234567
0x020x060x100x000x000x030xCD0x38
+
+ +或者使用10功能码也可:
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
012345678910
0x020x100x100x000x000x010x020x000x030xE30x60
+
+其功能是将站号由2号改为3号
+方法二:忘了原站站号,需要将产品独自连接到电脑上,注意总线上不能有其它485产品,用0号站对其操作,指令如下:
+ +
+ + + + + + + + + + + + + + + + + + + + + +
01234567
0x000x060x100x000x000x030xCC0xDA
+
+注:加粗字替换为希望修改成的目标站号值即可。
+方法三:可以用清易电子科技有限公司软件的设置站号指令。详见软件
+ +## QS-FX 风向传感器 + +
+ + + + + +
+ + QS-fx + + + 自体积小,重量轻,野外携带安装极为方便,防水防震结构设计,可在野外全天候使用

+ 检测精度高,系统采用低功耗环保节能设计,数字处理技术

+ 量程宽,稳定性好

+ 数据信息显示线性度好,信号传输距离长,抗外界干扰能力强

+
+
+ +### 适用范围 +该传感器可测量室外环境中的风向,可以测量以标签北为起点的0-359度的自然界风向,具有很高的性价比。该仪器广泛用于环保、气象、农业、林业、水利、建筑、科研及教学等领域。 +### 接线说明 +**电压、电流型接线定义** +
+ + + + + + + + + + + + + + + + + + + + + +
接入外部线
电源正红色棕色
电源负蓝色黑色
信号黄色蓝色
+
+ +**485型接线定义** +
+ + + + + + + + + + + + + + + +
线色棕色蓝色灰色黑色
485电源正485B485A电源负
+
+ +### 技术参数 +测量范围:0--359度: (0.4V,或4MA对应0度,北的方向)
+16个方向:(每增加0.1v或1ma增加一个方位,
+0.4-2v,或4-20ma,16个刻度对应16个方位)

+测量精度:±1度

+工作电流:<15mA

+负载能力:小于600欧 一般建议250欧
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
电压型输入电压7V~24V DC
输出信号0.4~2V
风向值(输出电压-0.4)/1.6*360
输入电压12V~24 V DC
输出信号0~5 V
风向值(输出电压-1)/4*360
电流型输入电压12V~24 V DC
输出信号4~20mA
风向值(输出电流-4)/16*360
485型输入电压7V~24 V DC
通信协议Modbus-RTU
+
+ +### 通信协议 + +**MODBUS协议(可定制)** ++ 通讯方式:485 通讯,传送距离< 1000米 ++ 通讯速率:9600,n,8,1 ++ 通讯协议:MODBUS-RTU协议,出厂站号为2号站,依需要可以进行修改。 +ModBus协议的命令包括:
+读出风向的数值(出厂为2号站)
+读取风向值命令格式举例:
+
+ + + + + + + + + + + + + + + + + + + + + +
01234567
0x020x030x000x000x000x010x840x39
+
+注:开始的第一个字节02是站号,如果你已修改过站号设置,应将后第一位的 02 修改为您设置的站号。随之,最后两位是 16位的CRC校验,重新计算过后写上。
+返回风向的命令格式举例:
+
+ + + + + + + + + + + + + + + + + + + +
0123456
0x020x030x020x000x1F0xBD0x8C
+
+ +注:001F所在的位4,5位为风向的值
+风向数据解析方法:
+风向(°)=0X001F=31(以北为开始,输出成顺时针输出度数)
+修改自身站号
+方法一:知道现在站号,发送如下指令
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
012345678910
0x020x100x100x000x000x010x020x000x030xE30x60
+
+其功能是将站号有2号为3号
+目标站号值即可,发送需客户自行计算CRC的值。
+方法二:忘了原站站号, 需要将产品独自连接到电脑上,注意总线上不能有其它485产品,用0号站对其操作,指令如下:
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
012345678910
0x000x100x100x000x000x010x020x000x030xFA0x00
+
+方法三:可以用清易电子科技有限公司软件的设置站号指令。详见软件
\ No newline at end of file diff --git a/docs/doc/sensor/gas_sensor.md b/docs/doc/sensor/gas_sensor.md new file mode 100644 index 0000000..48bc920 --- /dev/null +++ b/docs/doc/sensor/gas_sensor.md @@ -0,0 +1,1802 @@ +# 气敏传感器 + + + + + + +## TB600B-IAQ-10 空气质量检测模组 + +
+ + + + + +
+ + TB600B + + + 多种有害气体测量反应计算,可有效评估空气新鲜度;

+ 可检测VOC有机挥发物类、硫化物、氮氧化物、胺类、烃类、酮类、醇类、一氧化碳等多种无机气体;

+ 长寿命、检测稳定、可靠性高;

+ 快速响应;

+ 独立温湿度数字传感器,结合智能算法,环境适应性强;

+ 小体积低功耗;

+
+
+ +### 应用领域 ++ 室内家居空气质量污染监测 ++ 家用、商用新风在线净化系统 ++ 家用新风机、净化器 ++ 商业场所空气质量污染监测 ++ 室内温湿度监测仪 ++ 车载空气净化器 ++ 公共交通工具空间内空气监测 ++ 暖通空调系统 ++ 智能可穿戴设备(腕表、口罩、手机) ++ 健康运动设备 ++ 抽油烟机和智能家具产品 ++ 实验室排风柜系统 ++ 超净实验室环境监测 ++ 小型无人机环境空气质量监测 + +### 接线说明 +
+ TB600B_2 +
+
+按照上图中从上到下的顺序: +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
序号TB600B模块备注
1TX接嵌入式系统RX引脚
2RX接嵌入式系统TX引脚
3GND模块公共地
4VCC供电电压,3.3 V~5.5 V
+
+ +### 使用步骤 ++ 接线 ++ 空气质量检测模组上电后需要短暂的数据稳定时间,通常在1min以内。 ++ 该检测模组为扩散式检测环境气体,需要确保流量在500ml以内,且保证流量稳定。流量较大时会带来压力的变化,从而导致传感器信号值变化。流速会产生压力,压力的变化会导致输出信号的变化,压力增大,信号变大,传感器信号会出现峰值突变。避免在负压环境下使用,对传感器造成物理无法恢复的损坏。 + +### 通信协议 +#### 一、通用设置 +传感器使用串行通讯方式。 + +
+ + + + + + + + + + + + + + + + + +
波特率9600
数据位8位
停止位1位
校验位
+
+注意: 通讯分为主动上传和问答式,上电默认为问答式。 + +#### 二、 传输模式切换指令 ++ 切换到主动上传 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
012345678
起始位保留切换命令主动上传保留保留保留保留校验值
0xFF0x010x780x400x000x000x000x000x47
+
+ ++ 切换到被动上传 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
012345678
起始位保留切换命令主动上传保留保留保留保留校验值
0xFF0x010x780x410x000x000x000x000x46
+
+ +#### 三、 查询模式下命令 ++ 获取传感器类型,最大量程,单位小数位数指令:`0xD1` +
+返回值:
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
012345678
传感器类型最大量程高位最大量程低位单位保留保留保留数据小数位数(bit[4]~bit[7]),数据正负号(bit[0]~bit[3])校验值
0x180x000xC80x020x000x000x000x010x35
+
+**说明:**
+最大量程 = (最大量程高位 << 8) | 最大量程低位
+单位: 0x02( $ ppm $ 和 $mg/m_3$ )
+正负号: 0(正数) 1(负数)
+小数位数: 读出的浓度值是代多少个小数,小数位数最多是3位 + ++ 获取传感器类型,最大量程,单位,单位小数位数指令:`0xD7` +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
012345678
指令头1指令头2传感器类型最大量程高位最大量程低位单位数据小数位数(bit[4]~bit[7]),数据正负号(bit[0]~bit[3])保留校验值
0xFF0xD70x180x000xC80x020x010x000x46
+
+ +**说明:**
+校验和:1~7位数据相加,生成一个8位的数据,各位相反,末尾加1
+小数位数bit[4]~bit[7]:
+`(bit[7]<<3) | (bit[6]<<2) | (bit[5]<<1) | bit[4] = 小数位数` +

+ +数据正负号(bit[0]~bit[3])
+`(bit[3]<<3) | (bit[2]<<2) | (bit[1]<<1) | bit[0] = 0` 负向抑制 +
+`(bit[3]<<3) | (bit[2]<<2) | (bit[1]<<1) | bit[0] = 0` 正向抑制 +
+
+单位: +0x02: 单位为$mg/{m^3}$和$ppm$
+0x04: 单位为$um/{m^3}$和$ppb$
+0x08: 单位为$10g/{m^3}$和$%$ + ++ 主动读气体浓度值格式如下: +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
012345678
起始位保留命令保留保留保留保留保留校验值
0xFF0x010x860x000x000x000x000x000x79
+
+返回值: +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
012345678
起始位命令气体浓度高位($ug/{m^3}$)气体浓度低位($ug/{m^3}$)满量程高位满量程低位气体浓度高位($ppb$)气体浓度低位($ppb$)校验值
0xFF0x860x000x2A0x000x000x000x000x30
+
+ +**说明:**
+校验和:1~7位数据相加,生成一个8位数据,各位取反,末尾加1
+气体浓度值 = 气体浓度高位 * 256 + 气体浓度低位
+(浓度高位和浓度低位需要从16进制换算为10进制后再带入本公式计算) + ++ 气体浓度值和温湿度合并读取指令 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
012345678
起始位保留命令保留保留保留保留保留校验值
0xFF0x010x870x000x000x000x000x000x78
+
+返回值: +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
012345678
起始位命令气体浓度高位($ug/{m^3}$)气体浓度低位($ug/{m^3}$)满量程高位满量程低位气体浓度高位($ppb$)气体浓度低位($ppb$)温度高位
0xFF0x870x000x2A0x030xE80x000x200x09
9101112
温度低位湿度高位湿度低位校验和
0xC40x130x880xDC
+
+ +**说明:**
+校验和: 1~11位数据相加,生成1个8位的数据,各位取反,末尾加1
+气体浓度值 = 气体浓度高位 * 256 + 气体浓度低位;
+(浓度高位和浓度低位需要从16进制换算为10进制再带入本公式计算)

+温度是带符号和两位小数的数据,单位是(°C),伪代码计算公式:
+`T = (float)(int)((0x0A<<8)|0x09)/100`

+湿度是不带符号和两位小数的数据,单位是(rh%),伪代码计算公式:
+`Rh = (float)(uint)((0x0A<<8)|0x09)/100` + + ++ 获取当前温度和湿度 +指令:`0xD2` +
+ + + + + + + + + + + + + + + + + + + +
0123
温度高8位温度低8位湿度高8位湿度低8位
0x0A0x090x110xF4
+
+ +**说明:**
+温度是带符号和两位小数的数据,单位是(°C),伪代码计算公式:
+`T = (float)(int)((0x0A<<8)|0x09)/100`

+湿度是不带符号和两位小数的数据,单位是(rh%),伪代码计算公式:
+`Rh = (float)(uint)((0x0A<<8)|0x09)/100` + ++ 获取当前温度和湿度带校验 +指令:`0xD6` +
+ + + + + + + + + + + + + + + + + + + + + + +
01234
温度高8位温度低8位湿度高8位湿度低8位校验和
0x0A0x090x110xF40xE8
+
+ +**说明:**
+校验和:0~3位数据相加,生成一个8位的数据,各位取反,末尾加1 + +#### 四、 主动上传模式下数据 +上传数据格式如下: +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
012345678
起始位命令气体浓度高位($ug/{m^3}$)气体浓度低位($ug/{m^3}$)满量程高位满量程低位气体浓度高位($ppb$)气体浓度低位($ppb$)校验值
0xFF0x860x000x2A0x000x000x000x200x30
+
+ +**说明:**
+校验和:0~11位数据相加,生成一个8位的数据,各位取反,末尾加1
+气体浓度值 = 气体浓度值高位 * 256 + 气体浓度值低位;
+(浓度高位和浓度低位需要从16进制换算为10进制后再带入本公式计算) + +*其他关于低功耗的指令详见数据手册* + +## TB600B-WQ-HCHO-1-O 甲醛气体检测模组 + +
+ + + + + +
+ + TB600B_HCHO + + + ppb级高精度环境监测应用;

+ 极强的抗干扰能力,对低浓度乙醇、CO、芳香烃、异味、烟气、空气清新剂等有很好的抗干扰能力;

+ 长寿命、检测稳定、可靠性高;

+ 快速响应;

+ 独立温湿度数字传感器,结合智能算法,环境适应性强;

+
+
+ +### 应用领域 ++ 室内家居空气质量污染监测 ++ 家用、商用新风在线净化系统 ++ 家用新风机、净化器 ++ 商业场所空气质量污染监测 ++ 室内温湿度监测仪 ++ 车载空气净化器 ++ 公共交通工具空间内空气监测 ++ 暖通空调系统 ++ 智能可穿戴设备(腕表、口罩、手机) ++ 健康运动设备 + +*接线及通信协议与TB600B-IAQ-10 空气质量检测模组相同,这里不再赘述。更为详细的指令详见数据手册* + +## TB600B-TVOC-10 有机挥发物气体检测模组 + +
+ + + + + +
+ + TB600B_TVOC + + + ppb级高精度环境监测应用;

+ ppb级TVOC气体传感器;

+ 可对300多类以上的VOC气体反应;

+ 长寿命、检测稳定、可靠性高;

+ 快速响应;

+ 独立温湿度数字传感器,结合智能算法,环境适应性强;

+ 小体积低功耗;

+
+
+ +### 应用领域 ++ 室内家居空气质量污染监测 ++ 家用、商用新风在线净化系统 ++ 家用新风机、净化器 ++ 商业场所空气质量污染监测 ++ 室内温湿度监测仪 ++ 车载空气净化器 ++ 公共交通工具空间内空气监测 ++ 暖通空调系统 ++ 智能可穿戴设备(腕表、口罩、手机) ++ 健康运动设备 ++ 抽油烟机和智能家具产品 ++ 实验室排风柜系统 ++ 超净实验室环境监测 ++ 小型无人机环境空气质量监测 + +*接线及通信协议与TB600B-IAQ-10 空气质量检测模组相同,这里不再赘述。更为详细的指令详见数据手册* + + +## G8 二氧化碳气体检测模组 + +
+ + + + + +
+ + G8 + + + 非色散红外技术,精确监测CO2

+ 定期自动校准和手动校准,可选

+
+
+ +### 应用领域 ++ 室内空气质量 ++ 采暖通风与空调系统 ++ 环境监测 ++ 绿色建筑 + +### 性能指标 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
检测气种 二氧化碳
应用原理 非色散红外技术
检测范围400ppm ~ 2000ppm
可扩展为0~10000ppm
测量周期4 秒
准确度 ±50ppm±读数的3%
响应时间(T90) 120秒
预热时间上电8秒(输出浓度)上电3分钟(准确输出)
+
+ +### 接线说明 +
+ G8_pin +
+
+ +**工作电压为4.5V ~ 5.25V** + +### 通信协议 +#### 一、通用设置 +传感器使用串行通讯方式。 + +
+ + + + + + + + + + + + + + + + + +
波特率9600
数据位8位
停止位1位
校验位
+
+ +#### 二、数据包格式 + +
+ + + + + + + + + + + + + + + + + + +
Byte1......ByteN0x09校验字0x0d0x0a
数据区Tab校验区回车换行
+
+ +1. 一个数据包是由 ASCII 码组成的字符串 +2. 校验字算法:数据区(Byte1~ByteN,不包含 Tab)的所有字节累加求和,记为 +Sum,则校验字 Checksum = (unsigned char)(-(signed char)Sum) +3. 校验区内容:是校验字的两位 ASCII 码(占两个字节),例如校验字为 0x23,则 +校验区为 0x32,0x33(即字符'2','3');又如校验字是 0xab,则校验区为 +0x41,0x42(即字符'A','B',注意此处应是大写字母) + +### 串口协议命令表 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
指令功能名称说明
R0读取传感器序列号及版本号/
R4读取传感器量程及单位/
R6读浓度/
RA查看零点校准功能状态包括开关、进行阶段、周期、基准值
SA+时间(h)设定零点校准周期+开关时间为0时表示暂停此功能;
时间大于0时表示开启此功能,并将周期设为相应时间
SC+浓度(ppm)设定零点校准基准值/
B+浓度(ppm)单点标定/
F0切换到F0模式传感器进入不主动发送浓度值状态
F1切换到F1模式传感器进入主动发送浓度值状态
+
+ +#### 协议示例 ++ 读取传感器序列号及版本号 + +发送: +
+ + + + + + + + + + + + + + + + + + + +
0123456
0x520x300x090x370x450x0D0x0A
+
+ +转换为ASCII 码: R0 7E
+应答(ASCII 码): ID:718D FA31 FW:207 MAP:1 11

+说明:
+ID:718D FA31 —— 序列号
+ FW:207 —— 固件版本号
+ MAP:1 —— 寄存器映射版本号
+ + + 读取浓度值 + +发送: +
+ + + + + + + + + + + + + + + + + + + +
0123456
0x520x360x090x370x380x0D0x0A
+
+ +转换为ASCII 码: R6 78
+应答(ASCII 码): 1265 32

+说明:
+浓度值为1265ppm + +*更多示例详见数据手册* + +## AS830 可燃(有毒)气体探测模块 + +
+ + + + + +
+ + AS830 + + + 监测可燃气体和一氧化碳的浓度;

+ 具有燃气泄漏报警功能;

+ 具有燃气不完全燃烧报警功能。
+
+
+ +### 应用领域 ++ 可燃(有毒)气体泄漏报警; ++ 燃气炉具、热水器不完全燃烧监控; ++ 室内空调环境下,空气质量监测。 + +*注:该模块可独立使用,也可安装在燃气器具内配套使用。* + +### 技术参数 + +
+ + + + + + + + + + + + + + + + + + + + + + +
分型产品(可选)分型号可探测气体传感器
AS830CO 和 CH4SB-95-12
AS830/CO COSB-500-12
AS830/CH4 CH4 SB-12A
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
项目规格
供电电源DC5V±10%,≤100mA
监视状态:电流≤40mA 报警状态:电流≤70mA
预热时间通电后 180s(3 分钟)*1
报警方式CO 浓度低于 100ppm,不报警;
浓度在 150ppm〜300ppm 区间,保持 180s,发出低段报警;
浓度高于 300ppm 且保持 30s,发出高段报警。
CH4 洁净空气,不报警;
浓度高于 6%LEL,保持 30s,发出高段报警。
注:报警区间和报警点可以依据客户要求设计。
指示灯状态 指示灯
自检 绿、红、黄色灯依次点亮
预热 绿灯 快速闪亮
正常监视 绿灯 慢速闪亮
故障 黄灯 快速闪亮
报警 甲烷报警: 红灯 常亮
低段报警(一氧化碳):红灯 慢速闪亮
高段报警(一氧化碳):红灯 快速闪亮
蜂鸣器有源蜂鸣器距离 1 米处声压级 70dB〜95dB
状态 蜂鸣器
自检 短鸣一声
预热 预热完成短鸣一声,提醒退出预热状态
故障 每隔 10 秒“滴”一声
报警 低段报警:每隔 2 秒“滴、滴”慢速鸣叫
高段报警:每隔 0.5 秒“滴、滴”快速鸣叫
按键内置微动开关,通过针孔,使用一个工具按压,实现自检和消音*2 功能
输出方式PWM 格式信号,峰值电平≤3.3V
输出格式工作状态 输出波形
正常监视 高电平
电源偏移高 5ms 低 5ms 的方波
传感器断路 高 5ms 低 10ms 的方波
传感器短路 高 5ms 低 15ms 的方波
CO 低段报警 高 5ms 低 20ms 的方波
CO 高端报警 高 5ms 低 25ms 的方波
CH4 高段报警 高 5ms 低 30ms 的方波
+
+ +### 接线说明 +
+ AS830_pin +
+
+连接线束可采用标准MicroUSB接口和标准4PIN端子。 +
+ + + + + + + + + + + + + + + + + + + + +
引脚说明MicroUSB (安卓手机充电器标准接口)
4PIN端子(XH-A卧式)
VCC 电源正 5 V
PWM 状态输出引脚,输出 PWM 波形
GND电源地
+
+ + +### 通信协议 +#### 一、通用设置 +
+ + + + + + + + + + + + + + + + + +
波特率9600
数据位8位
停止位1位
校验位
+
+ +#### 二、数据说明 + +模块上电发送产品信息,然后每 13 秒发送一次浓度数据,数据示例如下:
+AS830_CH4_CON_V1.0_202006093E
+0000000078  11
+0     D0
+……
+7     C9
+12    9D
+20    9E
+……
+0     D0 + +#### 三、数据格式 +浓度(1 个或 2 个字符) tab (0x09)校验码(2 个字符)0x0D 0x0A
+浓度单位为%LEL,量程 0~20%LEL +#### 四、校验码计算方法 +将从头到 tab(不包含 tab)前的所有字符求取单字节累加和 s. 则校验字为 `checksum= (unsigned char)(-(signed char)s)`
+浓度为 0 时,s=0x30,`checksum = (unsigned char)(-0x30)=0xD0`,转换成 ASCII 格式 D0
+浓度为 7 时,s=0x37,`checksum =(unsigned char)(-0x37)=0xC9`,转换成 ASCII 格式 C9
+浓度为 12 时,s=0x31+0x32=0x63,`checksum=(unsigned char)(-0x63)=0x9D`,转换成 ASCII 格式 9D
+ +## WZ-H3-K型选择性甲醛检测模组 +
+ + + + + +
+ + WZ-H3-K + + + 选择性检测甲醛

+ 测量精度高

+ 响应速度快

+ 使用寿命长

+ 稳定可靠

+ 低功耗 +
+
+ +### 应用领域 ++ 新风系统 ++ 空气净化器 ++ 便携式仪表 ++ 可穿戴设备 ++ 智能家居 + +### 管脚定义 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Pin1 VCC3.3V-5V
Pin2GND
Pin3RST复位
Pin4SW程序接口
Pin5NC悬空
Pin6TXD传感器发送引脚
Pin7RXD传感器接收引脚
+
+ +### 技术指标 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
产品型号 WZ-H3-K
检测气体甲醛
检测量程0-2ppm
最大过载 5ppm
供电电压3.3-5V
响应时间(T90) <120S
分辨率 0.01ppm
检测精度 ±30ppb 或±10%取大值(25±3℃)(50±5%RH)
+
+ + +### 通信协议 +#### 通用设置 +传感器模块使用串行通讯方式,通讯配置参数如下: +
+ + + + + + + + + + + + + + + + + +
波特率9600
数据位8位
停止位1位
校验位
+
+ +#### 通讯命令 +通讯分主动上传和问答式,出厂默认为主动上传,每隔 1 秒发送 1 次浓度值。
+命令行格式如下:
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
012345678
起始位气体名称单位小数位数无 气体浓度高位气体浓度低位满量程高位满量程低位校验值
0xFFCH2O=0x17Ppb=0x040x000x000x250x070xD00x25
+
+气体浓度值=气体浓度高位*256+气体浓度低位;
+(浓度高位和浓度低位需从 16 进制换算为 10 进制后再代入本公式计算)
+切换到问答式,命令行格式如下:
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
012345678
起始位保留切换命令问答 保留 保留 保留 保留 校验值
0xFF0x010x780x410x000x000x000x000x46
+
+切换到主动上传,命令行格式如下:
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
012345678
起始位保留切换命令主动上传 保留 保留 保留 保留 校验值
0xFF0x010x780x400x000x000x000x000x47
+
+读气体浓度值格式如下:
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
012345678
起始位保留命令保留 保留 保留 保留 保留 校验值
0xFF0x010x860x000x000x000x000x000x79
+
+传感器返回值格式如下:
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
012345678
起始位命令气体浓度高位(ug/m3)气体浓度低位(ug/m3) 保留 保留 气体浓度高位(ppb) 气体浓度低位(ppb) 校验值
0xFF0x860x000x2A0x000x000x000x200x30
+
+ +气体浓度值=气体浓度高位*256+气体浓度低位
+(浓度度高位和浓度低位需从 16 进制换算为 10 进制后再代入本公式计算) + +## PS5308/PS5308A 激光颗粒物传感器 + +
+ + + + + +
+ + PS5308A + + + 实时检测输出

+ 数据准确可靠

+ 最小分辨粒径 0.3 微米

+ 特定激光防衰减恒定亮度功能                

+ 具备抗干扰能力

+ 标准 TTL 串口数据输出

+ 小尺寸易安装 +
+
+ +### 应用领域 ++ 空气净化器 ++ 新风系统 ++ 空调 ++ 车载空气净化器 ++ 空气质量监测仪 ++ 环境监测 ++ 手持式空气质量检测仪 +### 管脚定义 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Pin1 VCC电源 5V
Pin2GND电源地
Pin3WKUP高电平或悬空:工作状态;
低电平:休眠状态.
TTL 电平@3.3V
Pin4RXD串口接收,TTL 电平@3.3V
Pin5TXD串口发送,TTL 电平@3.3V
Pin6REST传感器复位信号 TTL 电平@3.3V,低电平复位
Pin7NC悬空
Pin8NC悬空
+
+ +### 技术指标 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
产品型号 PS5308/PS5308A
颗粒物测量范围 PM2.5(PM10 选配)
检测量程0~1000 ug/ m³
颗粒物质量浓度一致性 ≥100 ug/ m³:±10%
<100 ug/ m³:±10 ug/ m³
颗粒物质量浓度准确性(参考标准:TSI 8530) ≥100 ug/ m³:±10%
<100 ug/ m³:±10 ug/ m³
电源电压 DC 5±0.5V,纹波<50mV
+
+ +### 通信协议 +#### 一、通用设置 +传感器使用串行通讯方式。 + +
+ + + + + + + + + + + + + + + + + +
波特率9600
数据位8位
停止位1位
校验位
+
+ +#### 二、数据包格式 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
字节序号 数据定义
0 0x44起始符 1
1 0x4D 起始符 2
2 0x00数据帧长度(字节 4 数据至校验位)
3 0x1C
4 XXPM1.0 浓度值(进风口带 60~80 目滤网时),单位:ug/m³
5 XX
6 XXPM2.5 浓度值(进风口带 60~80 目滤网时),单位:ug/m³
7 XX
8 XXPM10 浓度值(进风口带 60~80 目滤网时),单位:ug/m³
9 XX
10 XXPM1.0 浓度值(进出风口无障碍物时),单位:ug/m³
11 XX
12 XXPM2.5 浓度值(进出风口无障碍物时),单位:ug/m³
13 XX
14 XXPM10 浓度值(进出风口无障碍物时),单位:ug/m³
15 XX
16 XX0.1 升空气中直径在 0.3um 以上颗粒物个数
17 XX
18 XXP0.1 升空气中直径在 0.5um 以上颗粒物个数
19 XX
20 XX0.1 升空气中直径在 1.0um 以上颗粒物个数
21 XX
22 XX0.1 升空气中直径在 2.5um 以上颗粒物个数
23 XX
24 XX0.1 升空气中直径在 5.0um 以上颗粒物个数
25 XX
26 XX0.1 升空气中直径在 10um 以上颗粒物个数
27 XX
28 XX
29 XX
30 XX校验和=字节 0 数据+字节 1 数据+„„+字节 29 数据
31 XX
+
+ +数据说明: +1. 主要输出为空气中 PM2.5 颗粒物质量浓度,单位:ug/ m³。 +2. 传感器输出为主动输出。传感器上电后,主动向主机发送串行数据,时间间隔为 1 秒。 +3. 定义为“空白”的字节为厂家备用字节。 +4. “进出风口无障碍物”意指:传感器进出风量未受到影响。 \ No newline at end of file diff --git a/docs/doc/sensor/heat_sensor.md b/docs/doc/sensor/heat_sensor.md new file mode 100644 index 0000000..b83e336 --- /dev/null +++ b/docs/doc/sensor/heat_sensor.md @@ -0,0 +1 @@ +# 热敏传感器 \ No newline at end of file diff --git a/docs/doc/sensor/humidity_sensor.md b/docs/doc/sensor/humidity_sensor.md new file mode 100644 index 0000000..5f25168 --- /dev/null +++ b/docs/doc/sensor/humidity_sensor.md @@ -0,0 +1,2 @@ +# 湿敏传感器 +## \ No newline at end of file diff --git a/docs/doc/sensor/imagesrc/AS830.png b/docs/doc/sensor/imagesrc/AS830.png new file mode 100644 index 0000000..139a1ca Binary files /dev/null and b/docs/doc/sensor/imagesrc/AS830.png differ diff --git a/docs/doc/sensor/imagesrc/AS830pin.png b/docs/doc/sensor/imagesrc/AS830pin.png new file mode 100644 index 0000000..7aedb9e Binary files /dev/null and b/docs/doc/sensor/imagesrc/AS830pin.png differ diff --git a/docs/doc/sensor/imagesrc/D124.png b/docs/doc/sensor/imagesrc/D124.png new file mode 100644 index 0000000..3eb2aa0 Binary files /dev/null and b/docs/doc/sensor/imagesrc/D124.png differ diff --git a/docs/doc/sensor/imagesrc/G8.jpg b/docs/doc/sensor/imagesrc/G8.jpg new file mode 100644 index 0000000..cbaa7cd Binary files /dev/null and b/docs/doc/sensor/imagesrc/G8.jpg differ diff --git a/docs/doc/sensor/imagesrc/G8_pin.png b/docs/doc/sensor/imagesrc/G8_pin.png new file mode 100644 index 0000000..e3dcf34 Binary files /dev/null and b/docs/doc/sensor/imagesrc/G8_pin.png differ diff --git a/docs/doc/sensor/imagesrc/PS5308A.png b/docs/doc/sensor/imagesrc/PS5308A.png new file mode 100644 index 0000000..b13e950 Binary files /dev/null and b/docs/doc/sensor/imagesrc/PS5308A.png differ diff --git a/docs/doc/sensor/imagesrc/QS-fs.png b/docs/doc/sensor/imagesrc/QS-fs.png new file mode 100644 index 0000000..fb8690c Binary files /dev/null and b/docs/doc/sensor/imagesrc/QS-fs.png differ diff --git a/docs/doc/sensor/imagesrc/QS-fx.png b/docs/doc/sensor/imagesrc/QS-fx.png new file mode 100644 index 0000000..5258686 Binary files /dev/null and b/docs/doc/sensor/imagesrc/QS-fx.png differ diff --git a/docs/doc/sensor/imagesrc/TB600B.png b/docs/doc/sensor/imagesrc/TB600B.png new file mode 100644 index 0000000..788a1e4 Binary files /dev/null and b/docs/doc/sensor/imagesrc/TB600B.png differ diff --git a/docs/doc/sensor/imagesrc/TB600BHCHO.png b/docs/doc/sensor/imagesrc/TB600BHCHO.png new file mode 100644 index 0000000..8263be7 Binary files /dev/null and b/docs/doc/sensor/imagesrc/TB600BHCHO.png differ diff --git a/docs/doc/sensor/imagesrc/TB600BTVOC.png b/docs/doc/sensor/imagesrc/TB600BTVOC.png new file mode 100644 index 0000000..d174c6e Binary files /dev/null and b/docs/doc/sensor/imagesrc/TB600BTVOC.png differ diff --git a/docs/doc/sensor/imagesrc/TB600B_2.png b/docs/doc/sensor/imagesrc/TB600B_2.png new file mode 100644 index 0000000..b13c7fb Binary files /dev/null and b/docs/doc/sensor/imagesrc/TB600B_2.png differ diff --git a/docs/doc/sensor/imagesrc/WZ-H3-K.png b/docs/doc/sensor/imagesrc/WZ-H3-K.png new file mode 100644 index 0000000..4044d4c Binary files /dev/null and b/docs/doc/sensor/imagesrc/WZ-H3-K.png differ diff --git a/docs/doc/sensor/imagesrc/bmp180.jpg b/docs/doc/sensor/imagesrc/bmp180.jpg new file mode 100644 index 0000000..adc05d4 Binary files /dev/null and b/docs/doc/sensor/imagesrc/bmp180.jpg differ diff --git a/docs/doc/sensor/magneto_sensor.md b/docs/doc/sensor/magneto_sensor.md new file mode 100644 index 0000000..f1cb315 --- /dev/null +++ b/docs/doc/sensor/magneto_sensor.md @@ -0,0 +1 @@ +# 磁敏传感器 \ No newline at end of file diff --git a/docs/doc/sensor/photoelec_sensor.md b/docs/doc/sensor/photoelec_sensor.md new file mode 100644 index 0000000..81350cf --- /dev/null +++ b/docs/doc/sensor/photoelec_sensor.md @@ -0,0 +1 @@ +# 光电传感器 \ No newline at end of file diff --git a/docs/doc/sensor/pressure_sensor.md b/docs/doc/sensor/pressure_sensor.md new file mode 100644 index 0000000..2a21f78 --- /dev/null +++ b/docs/doc/sensor/pressure_sensor.md @@ -0,0 +1,52 @@ +# 压强传感器 +## BMP180 +
+ + + + + +
+ + bmp180 + + + 适合智能的高精度测量和数据采集,输出高精度的压力(或高度)和温度测量数据。

+ 与加速度计相互搭配,在没有GPS讯号的环境下,提供可靠的楼层侦测能力,以实现三维(3D)室内导航。

+ 可以检测:温度,大气压强,海拔高度。

+
+
+ +### 接线说明 +按照上图中从右向左的顺序: +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
序号BMP180模块备注
1VIN供电电压,1.8 V~3.6 V,典型值2.5 V
2GND模块公共地
3SCLI2C 时钟线
4SDAI2C 数据线
+
+ +### \ No newline at end of file diff --git a/docs/doc/sensor/voice_sensor.md b/docs/doc/sensor/voice_sensor.md new file mode 100644 index 0000000..9444413 --- /dev/null +++ b/docs/doc/sensor/voice_sensor.md @@ -0,0 +1,69 @@ +# 声音传感器 + +## D124 +
+
+ D124 +
+
+ +### 应用领域 +用于采集当前环境中的声音分贝大小,并以串口形式输出。 +### 接线说明 +
+ + + + + + + + + + + + + + + + + + + + + +
1棕线VCC/DC12V
2黑线GND/电源线
3蓝线RXD
4黄线TXD
+
+ +### 注意事项 ++ 模块具有防反接保护,接时只要注意不要把电源接到串口输出线上即可,以免烧坏转换模块或MCU。 ++ 串口输出为 TTL 电平,测试时请使用 TTL 转 USB 的模块。请勿使用 232 转 USB。 ++ 模块在平常安静的环境中输出为 50dB 左右。 ++ 测试时,电源地与串口地一定连通,让信号形成回路,否则测试时,串口软件显示无数据输出。当软件显示有乱码时,把串口测试软件的十六进制显示勾上即可显示正常数据。 + +### 通信协议 +波 特 率:9600
+输出方式:串口输出(协议见下) 1 次/1S
+起始位与停止位为固定值。
+数据计算方法:(数据_H\*256+数据_L)/10
+校验位计算方法: 数据_H+数据_L

+例: +
+ + + + + + + + + + + + + + + +
01234
0xAA0x020x210x230xFF
+
+声音计算方法: (2\*256+2\*16+1)/10=54.5dB
\ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..d739e4f --- /dev/null +++ b/package-lock.json @@ -0,0 +1,73 @@ +{ + "name": "XiUOS", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "async-validator": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.8.5.tgz", + "integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==", + "requires": { + "babel-runtime": "6.x" + } + }, + "babel-helper-vue-jsx-merge-props": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz", + "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==" + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" + }, + "deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", + "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==" + }, + "element-ui": { + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/element-ui/-/element-ui-2.13.2.tgz", + "integrity": "sha512-r761DRPssMPKDiJZWFlG+4e4vr0cRG/atKr3Eqr8Xi0tQMNbtmYU1QXvFnKiFPFFGkgJ6zS6ASkG+sellcoHlQ==", + "requires": { + "async-validator": "~1.8.1", + "babel-helper-vue-jsx-merge-props": "^2.0.0", + "deepmerge": "^1.2.0", + "normalize-wheel": "^1.0.1", + "resize-observer-polyfill": "^1.5.0", + "throttle-debounce": "^1.0.1" + } + }, + "normalize-wheel": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz", + "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU=" + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "throttle-debounce": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-1.1.0.tgz", + "integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg==" + } + } +} diff --git a/package.json b/package.json index 2a89f1a..d9c5d89 100644 --- a/package.json +++ b/package.json @@ -17,5 +17,8 @@ "vuepress": "^1.3.1", "@vuepress/plugin-back-to-top": "^1.3.1", "@vuepress/plugin-medium-zoom": "^1.3.1" + }, + "dependencies": { + "element-ui": "^2.13.2" } }