protocol.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. #pragma once
  2. #include <stdint.h>
  3. #pragma pack (push,1)
  4. typedef struct
  5. {
  6. uint8_t can_addr;
  7. }can_head_t;
  8. #pragma pack(pop)
  9. /* ================ 老协议 ================== */
  10. #pragma pack (push,1)
  11. typedef struct
  12. {
  13. //整个包大小,包含protocol_head_t
  14. uint8_t size;
  15. //命令设备
  16. uint8_t type;
  17. //协议类型
  18. uint8_t protocol;
  19. //命令类型
  20. uint8_t cmd;
  21. //命令校验
  22. uint16_t checksum;
  23. //命令处理调用
  24. uint8_t dir;
  25. //命令返回状态
  26. uint8_t bStatus;
  27. }protocol_old_head_t;
  28. #pragma pack(pop)
  29. /* ================ 新协议 ================== */
  30. #define PROT_V00 0x00
  31. #define PROT_V01 0x01
  32. #pragma pack (push,1)
  33. typedef struct {
  34. uint8_t dir :1;//1:bms out, 0: bms in
  35. uint8_t insert :1;//是否新插入
  36. uint8_t health :1;//电池是否有异常
  37. uint8_t discharger_fet :1;//dis/charger mos是否打开
  38. uint8_t charger_fet :1;
  39. uint8_t small_power :1;//小电是否打开
  40. uint8_t is_charging :1;//是否在充电
  41. uint8_t cmd_result :1;//PSxxx 下发的cmd,是否成功
  42. }bms_stat_t;
  43. typedef struct {
  44. uint8_t dir :1;//1:bms out, 0: bms in
  45. uint8_t power_cmd :1;//power命令是否有效,开关充放电mos,小电
  46. uint8_t discharger_fet :1;//打开dis/charger mos
  47. uint8_t charger_fet :1;
  48. uint8_t small_power :1;//打开小电
  49. uint8_t bms_info :1; //读取bms基本信息,电压,电流
  50. uint8_t bms_temps :1; //读取pack的温度
  51. uint8_t ext_cmd :1; //扩展命令
  52. }bms_cmd_t;
  53. typedef struct
  54. {
  55. //协议类型
  56. uint8_t protocol;
  57. union {
  58. bms_stat_t status;
  59. bms_cmd_t command;
  60. }u_sc;
  61. }protocol_head_t;
  62. #pragma pack(pop)
  63. enum
  64. {
  65. OP_NONE, //返回bms基本信息
  66. OP_BIN_LIAN, // not used
  67. OP_WRITE_SN,
  68. OP_PAIR,
  69. OP_UPDATE_PAIR,
  70. OP_READ_INFO,
  71. OP_ALARM_TIMES,
  72. OP_CELL_VOL,//0x07
  73. OP_TEMP_OTHER,//0x08
  74. OP_OPEN_FET = 0x0B,
  75. OP_CLEAR_PAIR = OP_TEMP_OTHER + 1,
  76. OP_UPDATE_SOFTWARE_REQ = 0x0E,
  77. OP_UPDATE_SOFTWARE = 0x0F,
  78. OP_MAX
  79. };
  80. #pragma pack (push,1)
  81. typedef struct
  82. {
  83. uint8_t bike_speed;
  84. uint32_t current_miles;//本次电门打开行驶的里程
  85. uint8_t egate_open; //电门开关信号
  86. uint8_t operate;
  87. uint8_t res[8];//保留
  88. }command_t;
  89. #pragma pack(pop)
  90. #pragma pack (push,1)
  91. typedef struct {
  92. uint8_t remain_mils; //预估可行驶里程
  93. uint8_t soc_percent; //剩余电量
  94. uint8_t charger_remain_time; //预计充电完成时间
  95. uint8_t is_charging; //是否在充电
  96. uint32_t current; //放电或者充电电流
  97. uint32_t pack_voltage; //电池包总电压
  98. uint8_t max_temp; //4个温感中的最高温度
  99. uint16_t bms_status; //bms的状态,比如过高温放电等
  100. uint32_t in_balance_cells; //正在均衡的电芯
  101. uint8_t misc_flags; //0:bound, 1-2: mosfet, 3: aux short, 4: full 5-6:reserve
  102. uint8_t result; //0-3:result, 4-7: operate
  103. }common_response_t;
  104. #pragma pack(pop)
  105. void protocol_send_bms_info(protocol_head_t *head);
  106. void protocol_send_debug_info(uint8_t dest, uint8_t *data, int size);