上电后安卓板主动发送数据,间隔500ms,单片机收到数据,根据具体逻辑响应,单片机3秒内未收到有效数据,断电断阀。
设备号 | 卡号 | 设备状态 | 出水量 | 继电器组 | 最大出水量(L) | 1L(脉冲或者时间) |
4(byte) | 4 | 1 | 2 | 2 | 2 | 2 |
最大出水量只对按量付费进行约束。
刷卡打水:
单片机端:电子水卡刷卡后,根据设备状态 填充卡号;
安卓版端:获取到卡号,查询卡状态,合法,组包卡号;
单片机端:获取到有效卡号,可以按键,更新出水量;
安卓端:判断出水量进行扣费;
单片机端:按键结算,更新出水量,卡号清零;
扫码打水:
安卓版端:获取设备号,查询状态,合法,组包卡号下发给单片机;
单片机端:获取到有效卡号,可以按键,更新出水量;
安卓端:判断出水量进行扣费;
单片机端:按键结算,更新出水量,卡号清零;
第二次改进:
1.寄存器读写指令详解
寄存器(flash) | 变量存储器(内存) | |
容量 | 256字节 | 256字节 |
地址范围 | 00-ff | 00-ff |
单元大小 | 一个单元一个字节 | 一个单元一个字节 |
读写指令 | 写0x80/读0x81 | 写0x82/读0x83 |
功能 | 单元功能已经定义好,用于硬件配置和控制操作,典型功能如单价,最大限额 | 单元功能已经定义好,用于存储变量值,例如打水金额。 |
2.数据帧格式说明
3.寄存器一览表
寄存器地址 | 定义 | R/W | 字节长度 | 说明 |
0x00 | 设备号 | R | 4 | 设备号 |
0x04 | 协议版本 | R | 1 | |
0x05 | 设备类型 | R | 1 | |
0x06 | 区域码 | R/W | 2 | |
0x08 | 脉冲数/1lL水多少秒 | R/W | 2 | 根据设备类型判断是时间型还是流量型 |
0x0a | 硬币器脉冲 | R/W | 2 | |
0x0c | 单次最大出水量(L) | R/W | 1 | |
存储器地址 | 定义 | R/W | 字节长度 | 说明 |
0x00 | 设备状态 | R | 1 | 安卓板(后台)根据设备状态判断终端能否工作,终端写操作 |
0x01 | 卡号 | R | 4 | 终端写操作,安卓读操作 |
0x05 | 出水量 | R | 2 | 终端写操作,安卓读操作 |
0x07 | 金额状态 | R/W | 1 | 终端根据金额状态灌装以及结束 |
0x08 | 继电器组 | R/W | 2 | |
0x0a | 投币金额 | R/W | 1 | 终端写操作,安卓读操作 |
4.读写寄存器实例
寄存器读写指令 0x80、0x81
设备暂定有256Byte的寄存器,主要用于相关硬件控制操作,按照字节(Byte)寻址。
起始地址对于寄存器读写指令(0x80、0x81)是单字节,地址范围为0x00~0xff。
数据长度(N)以字节为单位 ,表示连续读寄存器单元个数。
支持顺序读写多个寄存器。
定义 | 指令帧头 | 指令长度 | 指令 | 起始地址 | 数据内容 | 校验和 |
长度(字节) | 2 | 1 | 1(0x80) | 1 | 1 | 1 |
数据内容即为要写入的数据。
举例:寄存器0x03和0x04单元连续写入0x00 、0x01
发送:0xA5 0x5A 0x06 0x80 0x03 0x00 0x01 0xxx 0xxx
返回:0xA5 0x5A 0x04 0x80 0x03 0xxx 0xxx
定义 | 指令帧头 | 指令长度 | 指令 | 起始地址 | 数据内容 | 校验和 |
长度(字节) | 2 | 1 | 1(0x81) | 1 | 1 | 1 |
数据内容为要读的寄存器长度,单位byte,
返回为具体的寄存器值。
举例:连续读取寄存器寄存器0x03和0x04单元
发送:0xA5 0x5A 0x05 0x81 0x03 0x02 0xxx 0xxx
返回:0xA5 0x5A 0x07 0x81 0x03 0x02 0x00 0x01 0xxx 0xxx