# chirplan-node
**Repository Path**: sxwup/chirplan-node
## Basic Information
- **Project Name**: chirplan-node
- **Description**: ChirpLAN终端设备源码
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2022-11-24
- **Last Updated**: 2022-11-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# ChirpLAN终端模块
ChirpLAN模块定位为一个支持网络和点对点协议的低频半双工Chirp模块,内置功能完整的 AT 指令, 使用串口进行数据收发,降低了无线应用的门槛,可实现一对一或一对多的通信应用场景。
## 一、开发环境
- 开发环境编译器:Keil5
- pack包:HC32L136.1.0.0.pack
- Device:HC32L136J8TA
- Flash:HC32L136_64K
## 二、模块引脚说明

ChirpLAN网络模块引脚示意图
| 引脚名称 | IO 类型 | 引脚描述 |
| -------- | ------- | ------------------------------------------------------------ |
| VCC | 电源 | 供电引脚 |
| GND | 电源 | 参考地 |
| ANT | 模拟 | 射频信号输入/输出端口, ANT 端口预留匹配电路,
走线使用 50 Ω 阻抗匹配, 铺地并在周围加过孔 |
| AUX | 输出 | **模块状态指示引脚:**
0: 模块可以接收串口数据
1: 模块不可以接收串口数据 |
| UART-RX | 输入 | TTL 串口接收引脚 |
| UART-TX | 输出 | TTL 串口发送引脚 |
| SETA | 输入 | AT 与透传切换, 内部上拉,
0: P2P传输模式
1: AT 指令模式 |
| SETB | 输入 | 控制模块休眠, 内部上拉
0: 休眠(或无线电唤醒)
1: 唤醒 |
**注意:** 如果 SETA, SETB悬空,模块进入AT指令模式,这种机制是为了方便用户进行AT指令测试。
## 三、使用说明
终端支持多种工作模式,包括AT指令模式,点对点透传模式,组网透传模式。
### 3.1AT指令模式
该模式下只支持AT指令配置,对于无效信息会返回错误。
进入AT指令模式有两种方式:
1、通过上位机工具配置进入和退出。
2、通过配置SETA=1、SETB=1进入AT模式, 通过配置SETA=0、SETB=1退出AT模式。
退出AT指令模式后(或上电即为非AT指令时),模块会根据AT配置的协议模式,自动进入点对点透传工作模式或组网透传工作模式。
### 3.2点对点透传模式
该模式分为透明传输模式和定点传输模式,子模式的选择需要通过AT指令配置。
通过设置SETA选择进入AT指令模式或工作模式,通过设置SETB选择进入低功耗模式或非低功耗模式。
典型配置方式:
1、令SETA=1、SETB=1,再通过上位机工具配置工作模式,例如配置为点对点协议、透明传输,设置相应射频参数。
2、通过上位机工具配置退出配置状态,此时模组自动进入点对点透明传输工作状态。
3、通过串口发送任意数据,模组即可将数据透传发射出去。如果模组接收到数据,会通过串口显示出来。
4、如果想进入低功耗模式,可以令SETA=0、SETB=0,模组即可进入低功耗模式。需要再次发送时,需要令SETB=1,再通过串口发送数据。
### 3.3组网透传模式
该模式分为MODEA、MODEB、MODEC模式,子模式的选择需要通过AT指令配置。
通过设置SETA选择进入AT指令模式或工作模式,通过设置SETB选择进入低功耗模式或非低功耗模式。
典型配置方式:
1、令SETA=1、SETB=1,再通过上位机工具配置工作模式,例如配置为网络协议、主动上报模式,设置相应射频参数。
2、通过上位机工具配置退出配置状态,此时模组自动进入网络模式工作状态,并开始发起入网。
3、通过串口发送任意数据,模组即可将数据透传发射出去。如果模组接收到数据,会通过串口显示出来。
4、如果想进入低功耗模式,可以令SETA=0、SETB=0,模组即可进入低功耗模式。需要再次发送时,需要令SETB=1,此时模组会再次发起入网,入网成功后,可再通过串口发送数据。
## 四、代码结构

### 4.1应用层
应用层为进程提供服务,也可以向用户提供数据。它的数据功能我们在网络层为用户预留了接口。用户可以根据自己的需求对应用层进行规定和扩展。
### 4.2网络层
网络层负责对链路层的接口和参数初始化,并负责整个协议的运行、IO事件管理、低功耗管理等。
网络层可以根据需要,注册发送事件(选配)、接收事件(必须配置)、入网事件(选配)、参数事件(必须配置)。注册事件后,链路层就可以通过回调函数接口通知网络层。
网络层提供通过串口向网关发送数据的接口。
### 4.3链路层
链路层负责实现收发逻辑,提供重传、碰撞检测等功能。
链路层为上层提供接口,使用这些接口,上层可以完成对射频的相关操作,而不用关注这些操作是如何实现的。
chirp_function是链路层接口的集合,链路层接口包括:
#### 4.3.1初始化接口
```
chirplan_status_t ( *MacInit )(chirp_t *config, chirp_config_callback config_cb);
```
* config:参数结构体,包含所有希望链路层初始化的参数。
* config_cb:网关配置参数的回调函数。当网关有配置更新时,链路层会通过此回调函数将新的配置通知上层,此参数不可为NULL。
初始化之后,才可进行入网操作。
#### 4.3.2唤醒接口
```
chirplan_status_t ( *Wakeup )(void);
```
唤醒接口,与休眠接口搭配使用。
#### 4.3.3链路层状态获取接口
获取状态接口可以帮助上层了解链路层此时的工作情况,上层可以根据需要选择查询,共有四种查询接口。
```
chirplan_state_t ( *GetStatus )( void );
```
获取ChirpLAN工作状态。包含CHIRP_STATE_IDLE,CHIRP_STATE_UPLINK,CHIRP_STATE_DOWNLINK,CHIRP_STATE_RF_ERR。
```
chirplan_send_status_t ( *GetSendStatus )( void );
```
获取ChirpLAN发送状态。包含CHIRP_SEND_IDLE,CHIRP_SEND_ING,CHIRP_SEND_OK,CHIRP_SEND_ERR。
```
chirplan_recv_status_t ( *GetRecvStatus )( void );
```
获取ChirpLAN接收状态。包含CHIRP_RECV_IDLE,CHIRP_RECV_ING,CHIRP_RECV_OK,CHIRP_RECV_ERR。
```
chirplan_join_status_t ( *GetJoinStatus )( void );
```
获取ChirpLAN入网状态。包含CHIRP_RESET,CHIRP_SET。
#### 4.3.4设置射频工作参数接口
chirplan_status_t ( *SetRfConfig )( uint8_t txpower, uint8_t ldr,
uint8_t crcOn, uint16_t preambletime, uint16_t rxtimeouttime, uint16_t rxsleeptime);
* txpower:发射功率,取值范围:0~29。
* ldr:低速率模式开关,0:关闭,1:打开。
* crcOn:CRC校验开关,0:关闭,1:打开。
* preambletime:前导码时间,此设置仅对A/C模式有效,单位:毫秒。
* rxtimeouttime:超时接收窗口时间,A模式下有效,单位:毫秒。
* rxsleeptime:网关会下发这个参数,表示B模式的休眠时间,单位:秒。
#### 4.3.5设置射频速率参数接口
```
chirplan_status_t ( *SetRate )( uint8_t sf, uint8_t bandwidth, uint8_t coderate);
```
* sf:扩频因子,取值范围:7~12。值越小传输速率越高。
* bandwidth:信道带宽,取值范围:6~9。值越大传输速率越高。
* coderate:编码率,取值范围:1~4。值越大,单次传输的冗余数据越多,有效数据速率越低,传输时间越长,但通信成功率越好。
#### 4.3.6数据发送接口
```
chirplan_status_t ( *Send )(chirp_app_data_t * app_data, chirp_confirm_t confirmed, chirp_send_callback send_cb);
```
* app_data:本次要发送的数据。最大数据长度支持233字节。
* confirmed:本次发送数据是否要求网关回复应答。
* send_cb:发送回调函数。当发送结束时,链路层会通过此回调函数通知上层发送结果事件(上层可在事件中查询结果,结果即ChirpLAN的发送状态,CHIRP_SEND_OK或CHIRP_SEND_ERR)。不需要发送回调函数时,此参数可以配置为NULL。
#### 4.3.7入网接口
```
chirplan_status_t ( *Join )(chirp_join_callback join_cb);
```
* join_cb:入网回调函数。当入网结束时,链路层会通过此回调函数通知上层入网结果事件(上层可在事件中查询结果,结果即ChirpLAN的入网状态)。不需要入网回调函数时,此参数可以配置为NULL。
#### 4.3.8注册接收回调函数接口
```
chirplan_status_t ( *Recv )(chirp_recv_callback recv_cb);
```
* recv_cb:接收回调函数。当有接收结果时,链路层会通过此回调函数通知上层接收事件(上层可在事件中查询接收结果,结果可以通过chirp_config.app_data.RxBuffSize便捷查看,当有数据时,RxBuffSize不为0)。此参数不可为NULL,建议在初始化后,配置此接口。
#### 4.3.9休眠接口
```
chirplan_status_t ( *Sleep )( void );
```
配置链路层进入低功耗休眠状态,休眠后,链路层不再工作。
再次唤醒需要使用唤醒接口或初始化接口。
#### 4.3.10休眠重置接口
```
chirplan_status_t ( *StatusReset )( void );
```
在休眠接口的基础上,重置链路层的所有状态,相当于关闭整个链路层。
再次唤醒只可以使用初始化接口,并需要重新入网。
#### 4.3.11空中唤醒模式接收接口
```
chirplan_status_t ( *ClassBRx )( void );
```
在空中唤醒模式下,需要接收时调用。链路层会通过回调函数返回接收结果。
#### 4.3.12射频中断处理接口
```
void ( *IrqProcess )( void );
```
在链路层使用,用来处理射频中断事件。除特殊应用,此接口一般不需要上层使用。
### 4.4驱动层
驱动层为PAN3028驱动程序,是射频芯片的底层操作。
## 五、在线调试和固件升级
### 5.1在线调试
编译器默认设置的优化等级为Level 3,如果需要使用J-Link在线调试,需要修改优化等级设置。

代码中各个文件都有串口LOG信息接口,如果需要使用,只需要对相关接口进行定义。
#### 5.1.1AT指令LOG
文件:at_log.h
定义://#define AT_DEBUG
#### 5.1.2网络层LOG
文件:server_net.h
定义://#define NET_DEBUG
文件:ddl.h
定义://#define _PC_DEBUG_
#### 5.1.3链路层LOG
文件:ddl.h
定义://#define _CHIRPLAN_LOG_DEBUG_
文件:chirplan.h
定义://#define _CHIRPLAN_DEBUG_LEVEL_LOW_
定义://#define _CHIRPLAN_DEBUG_LEVEL_HIGH_
调试时可以根据需要,打开LOG信息接口,不建议一次打开过多的LOG信息接口,否则容易出现FLASH空间不足、上位机工具堵塞等问题。
### 5.2固件升级
#### 5.2.1 固件升级说明

0x0000~0x1000是boot.bin区
0x1000~0xFA00是app.bin区
0xFA00~0xFE00是参数存储区
0xFE00~0xFFFF是标志位区
#### 5.2.2 固件升级使用
##### 5.2.2.1 配置项
使用固件升级时,需要进行如下两项配置

startup_hc32l13x.s文件中,配置中断向量偏移长度
new_vect_table EQU 0x00001000 ;
##### 5.2.2.2 配置步骤
初次烧录
1、使用专用工具生成boot.bin+app.bin
2、擦除芯片
3、烧录合成的bin文件
再次升级固件
1、打开ChirpLAN上位机工具(ChirpLanTool.exe),选择正确的COM口,点击打开串口-进入配置状态-固件升级
2、浏览导入需要升级的app.bin(不需要使用boot.bin+app.bin)文件
3、点击开始升级
4、等待绿色进度条正常进行到100%即可
#### 5.2.3 不使用固件升级
##### 5.2.3.1 配置项
不使用固件升级时,需要进行如下两项配置

startup_hc32l13x.s文件中,配置中断向量偏移长度
new_vect_table EQU 0x00000000 ;
##### 5.2.3.2 配置步骤
1、擦除芯片
2、直接烧录bin文件
## 六、注意事项
模组发射功耗较高,如果无法入网成功(例如参数配置不当或不存在网关),模组会持续入网,此时注意模组发热情况,避免模组由于过热而损坏。
模组使用HC32L130F8UA作为主控MCU,支持64K字节FLASH,8K字节RAM。二次开发时,请注意FLASH剩余大小。