
产品功能설명:
X-SSG-A1101-RS485 十合一환경及空气质量센서采用高速处理器, 통합 CO2、甲醛、TVOC、激光粉 尘 PM2.5 、PM10 、PM1.0 颗粒物、온도、湿度、气压、조도及소음检测于一体, 通过 RS485 总线 통신방식实现환경质量데이터检测上报。采用旋转卡扣방식吸顶安装,操作简单。
产品기술指标
| 2.1 检测매개변수及分辨率 | |||
| 센서데이터 | 测量分辨率 | 测量范围 | 测量精度 |
| 이산화탄소 eCO2 | 1ppm | 400 ~ 60,000ppm | ±30ppm |
| TVOC | 1ug/m3 | 0 ~ 60,000ug/m³ | ±50ug/m3 |
| 甲醛 CH2O | 1ug/m3 | 0 ~ 1,000ug/m³ | ±25% |
| PM2.5 | 1ug/m3 | 0 ~ 1,000ug/m³ | ±10% |
| PM10 | 1ug/m3 | 0 ~ 1,000ug/m³ | ±10% |
| PM1.0 | 1ug/m3 | 0 ~ 1,000ug/m³ | ±10% |
| 온도 | 0.01℃ | -40 ~ 85℃ | ±0.2℃ |
| 湿度 | 0.01% | 0 ~ 100% | ±1%RH |
| 气压 | 1Pa | 30,000 ~ 110,000Pa | ±12Pa |
| 조도 | 1Lux | 0 ~ 60,000Lux | ±5% |
| 소음 | 1dB | 30 ~ 90dB | ±3dB |
注意:模块출력的 CH2O 值为 TVOC 的等效值,客户购买和使用时请注意。
2.2 工作电压: DC5V±0.2V @150mA
2.3 工作환경:工作온도- 10 ~ 60℃,工作湿度: 5 ~ 95%RH(无凝结)
2.4 通讯방식:Modbus-RTU 485 인터페이스
2.5 预热时间:小于 3 分钟
半导体 VOC 센서理论上来说通电时间越久越稳定
2.6 使用寿命: 3 年(空气中)
III.产品사양
3.1 外观크기图

I 、표준 4 线인터페이스 II 、2 线 + USB 전원 공급인터페이스
如上图所示, 本产品⃞供“표준 4 线인터페이스”和“2 线+USB 전원 공급”两种物理인터페이스,选购时请根 据实际需要注明。
本产品默认使用 5V 直流전원 공급,如需特殊电压(6 - 36V),可문의하기定制。
3.2 배선定义
1) “표준 4 线”인터페이스유형:
| 순번 | 名称 | 备注 |
| RS485_A | 黄色 | RS485_A |
| RS485_B | 绿色 | RS485_B |
| DC+ | 红色 | 默认 5V 直流전원 공급, 特殊电压需定制 |
| GND | 黑色 | 接地线 |
2) “2 线+USB 전원 공급”인터페이스유형:
| 순번 | 名称 | ⃞述 |
| A | 红色 (A) | RS485_A |
| B | 黑色 (B) | RS485_B |
| U | Micro USB | 直流 5V 전원 공급 |
注意:上表中的颜色为常规설명,具体배선时请以产品上的标签为准。
IV.RS485 통신 프로토콜
4.1 통신매개변수
ModBus-RTU 485 매개변수: 9600/8/N/1
出厂默认주소: 0x01
返回데이터时间:小于 100ms
4.2 통신 프로토콜
1) 읽기주소命令
方向:用户적용->센서模块;需要应答:是
请求消息형식:
| 바이트번호 | 데이터 | 설명 |
| 0 | 0xFE | 广播주소 |
| 1 | 0x11 | 보고서从机주소기능 코드 |
| 2 | 0x00 | 固定 |
| 3 | 0x00 | 固定 |
| 4 | 0x00 | 固定 |
| 5 | 0x01 | 固定 |
| 67 | CRC_LCRC_H | CRC 체크섬 |
响应消息형식:
| 바이트번호 | 데이터 | 설명 |
| 0 | 0x01 | 从机주소 |
| 1 | 0x11 | 보고서从机주소기능 코드 |
| 2 | 0x02 | 바이트数 |
| 3 | version | 固件버전 |
| 4 | 주소 | 当前주소 |
| 56 | CRC_LCRC_H | CRC 체크섬 |
例如:명령 보내기: FE 11 00 00 00 01 28 06
返回데이터: 01 11 02 12 01 70 5C
설명:返回데이터中 0x12 表示버전号为 V1.2 ,0x01 表示设备주소为 01
2) 修改주소命令。模组出厂默认주소为 0x01,주소范围可更改为: 1~247
方向:用户적용->센서模块;需要应答:是
请求消息형식:
| 바이트번호 | 데이터 | 설명 |
| 0 | 주소 | 当前주소 |
| 1 | 0x06 | 기능 코드 |
| 2 | 0x00 | 固定 |
| 3 | 0x00 | 固定 |
| 4 | 0x00 | 预留 |
| 5 | new 주소 | 新주소 |
| 67 | CRC_L CRC_H | CRC 체크섬 |
响应消息형식:
| 바이트번호 | 데이터 | 설명 |
| 0 | 주소 | 修改前的주소 |
| 1 | 0x06 | 기능 코드 |
| 2 | 0x00 | 固定 |
| 3 | 0x00 | 固定 |
| 4 | 0x00 | 预留 |
| 5 | new 주소 | 修改后的주소 |
| 67 | CRC_L CRC_H | CRC 체크섬 |
例如:当前주소为: 0x01 ,预设주소为: 0x02
명령 보내기: 01 06 00 00 00 02 08 0B
返回데이터: 01 06 00 00 00 02 08 0B
当前주소再从: 0x02 ,改回: 0x01
명령 보내기: 02 06 00 00 00 01 48 39
返回데이터: 02 06 00 00 00 01 48 39
3) 읽기데이터命令
方向:用户적용->센서模块;需要应答:是
请求消息형식:
| 바이트번호 | 데이터 | 설명 |
| 0 | 주소 | 当前주소 |
| 1 | 0x03 | 기능 코드 |
| 2 3 | 0x00 MM | 레지스터开始주소 |
| 4 5 | 0x00 NN | 需要읽기的센서个数 |
| 6 7 | CRC_L CRC_H | CRC 체크섬 |
应答消息형식:
| 바이트번호 | 데이터 | 설명 |
| 0 | 주소 | 当前주소 |
| 1 | 0x03 | 기능 코드 |
| 2 | NN*2 | 데이터길이 |
| 3 | xx xx...... | 센서데이터(气压占 4 바이트, 既 2 个레지스터; 其他每个센서데이터占 2 바이트, 既 1 个寄 存器) |
| 3+NN*2 4+NN*2 | CRC_L CRC_H | CRC 체크섬 |
注意:返回센서데이터可以根据레지스터주소和데이터길이来改变。
레지스터주소(0x00MM)与对应的센서데이터설명如下, 气压占 4 바이트(2 个레지스터),其余每个传 感器데이터占 2 바이트(1 个레지스터)。
| 레지스터주소 | 센서데이터 | 占用레지스터 수량 |
| 0x0000 | eCO2 | 1 |
| 0x0001 | TVOC | 1 |
| 0x0002 | CH2O | 1 |
| 0x0003 | PM2.5 | 1 |
| 0x0004 | 湿度 | 1 |
| 0x0005 | 온도 | 1 |
| 0x0006 | PM10 | 1 |
| 0x0007 | PM1.0 | 1 |
| 0x0008 | 조도(Lux) | 1 |
| 0x0009 | MCU 온도 | 1 |
| 0x000A | 소음(dB) | 1 |
| 0x000B | 气压(Pa) | 2 |
설명:
① 센서个数 00 NN 最小为 00 01,最大为 00 0B。MM 值为 00 时, NN 值最大可为 0B,此时能读 出所有센서的值, NN 为 01 时只能单独읽기 eCO2 的데이터, NN 为 02 时可읽기 eCO2 和 TVOC 的数
据,以此类推。
② 레지스터靠前的주소,在加大데이터길이时,可읽기后面센서的데이터,但레지스터靠后的주소,不 能읽기在此주소前센서的데이터。
③ 一个레지스터容纳 2 个바이트데이터, 气压占 4 바이트,既 2 个레지스터,因此,在읽기气压时要把连续 两个레지스터都读出来,其他每个센서데이터占 2 바이트,既 1 个레지스터。
详情如下:
| 00MM00NN | 可以읽기到的데이터 |
| 00000001 | 表示从시작주소 0000 읽기 CO2 데이터 |
| 00000002 | 表示从시작주소 0000 읽기 CO2 ,TVOC 데이터 |
| ...... | ...... |
| 0000000D | 表示从시작주소 0000 읽기 CO2,TVOC,CH2O,PM2.5,湿 度,온도,PM10,PM1.0,조도,MCU 온도,소음데이터,气压 데이터 |
| 00010001 | 表示从시작주소 0001 읽기 TVOC 데이터 |
| 00010002 | 表示从시작주소 0001 읽기 TVOC,CH2O 데이터 |
| ...... | ...... |
| 00010007 | 表示从시작주소 0001 取 TVOC,CH2O,PM2.5,湿度,温 度,PM10,PM1.0 데이터 |
| 0001000C | 表示从시작주소 0001 取 TVOC,CH2O,PM2.5,湿度,温 度,PM10,PM1.0,조도,MCU 온도,소음데이터,气压데이터 |
| 00020001 | 表示从시작주소 0002 읽기 CH2O 데이터 |
| 00020002 | 表示从시작주소 0002 읽기 CH2O,PM2.5 데이터 |
| ...... | ...... |
| 000B0001 | 表示从시작주소 000B 읽기气压데이터(2 个레지스터) |
例如: 模组的주소为 0x01,
用户보내기: 01 03 00 00 00 09 85 CC ,即可将 9 个센서데이터读出;
用户보내기: 01 03 00 00 00 0B 04 0D ,即可将 11 个센서데이터(含 MCU 온도)读出;
用户보내기: 01 03 00 00 00 0D 84 0F ,即可将 12 个센서데이터(气压占 2 个레지스터)读出;
用户보내기: 01 03 00 0B 00 02 B5 C9 ,即仅읽기气压데이터(占 2 个레지스터)。
4) 읽기一帧데이터
5) 返回데이터형식如下:
| 바이트번호 | 데이터 | 설명 |
| 0 | 0x01 | 헤더 |
| 1 | 0x03 | 기능 코드 |
| 2 | 0x1A | 데이터길이 |
| 3 4 | CO2_H CO2_L | CO2 데이터 |
| 5 6 | TVOC_H TVOC_L | TVOC 데이터 |
| 7 8 | CH2O_H CH2O_L | CH2O 데이터 |
| 9 10 | PM2.5_H PM2.5 L | PM2.5 데이터 |
| 11 12 | Humi_H Humi_L | 湿度데이터 |
| 13 14 | Temp_H Temp_L | 온도데이터 |
| 15 16 | PM10_H PM10_L | PM10 데이터 |
| 17 18 | PM01_H PM01_L | PM1.0 데이터 |
| 19 20 | Lux_H Lux_L | 조도(Lux)데이터 |
| 21 22 | MCU_TEMP_H MCU_TEMP_L | MCU 온도데이터 |
| 23 24 | dB_H dB_L | 소음(dB)데이터 |
| 25 26 27 28 | Pa_byte[3] Pa_byte[2] Pa_byte[1] Pa_byte[0] | 气压데이터(Pa) |
| 29 30 | CRC16_L CRC16_H | CRC16 체크섬 |
6) 系统매개변수설정
7) 可以通过对下表레지스터주소的读、写,以获取或修改系统매개변수。
8) 注意: 此项为高级功能, 请小心使用, 以免造成系统매개변수错误, 影响센서功能或데이터准确性。
| 레지스터주소 | 길이(바이트) | 系统매개변수 |
| 0x0100 | 4 | 센서설정位图(Sensor Map) |
| 0x0110 | 2 | 바이트 1(在前):是否为外置온습도센서 바이트 2:센서데이터用户校准位图,参见“传感 器模块位图 ” |
| 0x0111 | 2 | 바이트 1(在前):专用시리얼 HMI自定义指标项对应的센서번호 바이트 2:조도센서感光罩的透光率(0- 100), 0 表示没有感光罩, 100 表示无损耗 |
| 0x0118 | 2 | CO2 校准值, int16 |
| 0x0119 | 2 | TVOC 校准值, int16 |
| 0x011A | 2 | CH2O 校准值, int16 |
| 0x011B | 2 | PM2.5 校准值, int16 |
| 0x011C | 2 | 湿度校准值(100 倍), int16 |
| 0x011D | 2 | 온도校准值(100 倍), int16 |
| 0x011E | 2 | PM10 校准值, int16 |
| 0x011F | 2 | PM1.0 校准值, int16 |
| 0x0120 | 2 | 조도(Lux)校准值, int16 |
| 0x0121 | 2 | MCU 온도校准值, int16 |
| 0x0122 | 2 | 소음(dB)校准值, int16 |
| 0x0123 | 2 | 大气压校准值, int16 |
注意:
1.所有用户校准值都是有符号整数,负数表示负偏移,既要减去偏移量;
2.温/湿度用户校准值是按摄氏度放大 100 倍,如: 250 表示需要加 2.5 摄氏度; -110 表示需要 减去 1.1 摄氏度。
例如: 模组的주소为 0x01,
用户보내기: 01 03 01 10 00 01 84 33 ,读出外置온습도센서기호和센서데이터用户校准位图; 用户보내기: 01 06 01 10 00 02 04 0D ,열기온습도用户校准开关;
用户보내기: 01 03 01 1D 00 01 15 F0 ,读出온습도校准值;
用户보내기: 01 06 01 1D 00 FA 98 73 ,设置온도用户校准值 250,既+2.5 度; 用户보내기: 01 06 01 1D 80 6E F8 1C ,设置온도用户校准值-110,既-1.1 度。
4.3 电脑읽기 RS485 데이터
通过“485 转시리얼 포트”适配器,可以将센서模组연결到电脑以检测通讯和보기데이터。电脑端可以使 用 ModBus 测试도구(如: ShortBus Modbus Scanner,效果见下图)直接읽기데이터;也可以使用“串 口助手”等표준시리얼 포트도구,通过보내기查询消息获取데이터。
V. 各种센서데이터계산방식
. CO2 (ppm) = CO2_H * 256 + CO2_L
. TVOC (ug/m3) = TVOC_H * 256 + TVOC_L
. CH2O (ug/m3) = CH2O_H * 256 + CH2O_L
. PM2.5 (ug/m3) = PM2.5_H * 256 + PM2.5_L
. PM10 (ug/m3) = PM10_H * 256 + PM10_L
. PM1.0 (ug/m3) = PM01_H * 256 + PM01_L
. 照度 (Lux) = Lux_H * 256 + Lux_L
. 소음 (dB) = dB_H * 256 + dB_L
. 인터페이스返回的温、湿度(真实데이터的 100 倍):
. 正온도 (℃) = (Temperature_H * 256 + Temperature_L) / 100, 例如: T = (0x09d0) / 10 = 2512 / 100 = 25.12℃
. 负온도 (℃)
方法 1:直接转为有符号的 int 유형即可,例如: T = 0xfc83/10 = -893/100 = -8.93℃
方法 2:如果大于 0x7fff(32767)
则为负数 T = (0xfc83 - 65536) / 10 = (64643 - 65536) / 10 = -893 / 100 = -8.93℃
. 湿度 (%RH) = (Humidity_H * 256 + Humidity_L) / 100
. 气压 (Pa) = Pa_byte[3] * 224 + Pa_byte[2] * 216 + Pa_byte[1] * 28 + Pa_byte[0]
. 根据气压계산海拔高度
气压单位是 Pa,理论上,海拔每上升 9 米,大气压降低 100 Pa。而海平面표준大气压为 101,325 Pa, 因此,可以用下面的公式根据气压值(Pa)계산海拔高度(Altitude)的近似值:
1 、 简化版海拔高度公式 = (101325 – Pa) / 100 * 9
除了海拔高度, 影响气压的因素还有很多(例如온도),下面的公式相对更精确一些, 特别是在高海 拔位置:
2 、 校准版海拔高度公式 = 44330 * (1 – (Pa/101325)0.1903)
例如:如果测得的气压值为 99,882Pa,则两个公式계산得到的海拔高度(Altitude)分别为:
. 简化版海拔高度 = (101325 – 99882) / 100 * 9 = 129.8 米
. 校准版海拔高度 = 44330 * (1 – (99882/101325)0.1903) = 120.84 米
VI.注意事项
. 初次上电使用需预热 3 分钟以上
. 센서安装位置应高于地面 15~20CM 以上, 否则可能有地面沙尘, 飘絮物等大尘埃颗粒甚至絮 状物污染导致风扇缠绕阻转,建议使用设备采取适当的预过滤处理。
. 本产品为精密仪器, 请不要열기外壳, 正常操作无需了解设备内部情况。如设备有损坏, 必须 由专业人员检修和维修,在检修和维修之前请确认外部연결电源已切断。。
. 센서데이터确保出厂个体之间的一致性, 不以第三方检测仪器或데이터作为对比표준。如用户希 望最终测量结果和某第三方检测设备一致,可由用户根据实际采集结果进行데이터拟合校准。
. 本센서适用于普通室内환경,如用户设备在以下实际환경中使用,센서有可能因过度积 尘、积油、进水导致데이터一致性下降。例如:全年尘埃浓度大于 300 微克/立方米时间超过 50% ,或大于 500 微克/立方米时间超过 20%;油烟환경;高水雾환경;户外等。
VII. 센서模块位图
| 位 | 센서模块 |
| 0x01 | 조도 |
| 0x02 | 온습도气压 |
| 0x04 | 粉尘 |
| 0x08 | 空气质量 |
| 0x10 | 소음 |
VIII. CRC 체크섬 계산方法
CRC 代码和예제可参考: https://github.com/sunbaoshi1975/CRCTool
函数功能: CRC 체크섬函数,生成 CRC
매개변수설명:pushMsg:需要체크섬的数组集
us데이터Len :需要체크섬데이터的길이
返回매개변수: CRC 为 unsigned int16 유형,高位바이트为高位在前、低位在后
/*CRC verify high position*/
const unsigned char auchCRCHi[] = {
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01,
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,
0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01,
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40 };
/* CRC verify low position*/
const unsigned char auchCRCLo[] = {
0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4,
0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD,
0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7,
0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE,
0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2,
0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB,
0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91,
0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88,
0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80, 0x40 };
/*CRC check*/
uint16_t CRC16_Check(const uint8_t *pushMsg, uint8_t us데이터Len)
{
uint8_t uchCRCHi = 0xff;//high CRC init
uint8_t uchCRCLo = 0xff;//low CRC init
uint8_t uIndex; //CRC index in loop
while(us데이터Len--) {
uIndex = uchCRCLo^ *pushMsg++;//cal CRC
uchCRCLo = uchCRCHi^ auchCRCHi[uIndex];
uchCRCHi = auchCRCLo[uIndex];
}
return((uint16_t)uchCRCHi << 8 | uchCRCLo);
}
답글 작성