soft_can.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. #ifndef _SOFT_CAN_H_
  2. #define _SOFT_CAN_H_
  3. #include <stdint.h>
  4. #include "hpm_can_drv.h"
  5. /*----------------------------- 飞控自定义 CAN 组成协议格式
  6. * ---------------------*/
  7. // CAN协议使用扩展ID进行过滤,总共29位, 0x1FFFFFFF,禁止高7位全为1
  8. // 第28~26位,帧类型
  9. #define FRAME_TYPE_MASK 0xE0000000 // 1110 0000 0000 0000 0000 0000 0000 0000
  10. #define CAN_FRAME_TYPE_DATA 0x00 // 数据帧
  11. #define CAN_FRAME_TYPE_REQ 0x01 // 请求帧
  12. // 第25~19位,消息ID
  13. #define MSG_ID_MASK 0x1FC00000 // 0001 1111 1100 0000 0000 0000 0000 0000
  14. // 飞控发出的消息序号
  15. #define CAN_MSGID_CONTROLLER_TO_LED_TEST 0X00 // 测试消息
  16. #define CAN_MSGID_CONTROLLER_TO_LED_BLINK 0x01 // 灯闪烁
  17. // led发出的消息序号
  18. #define CAN_MSGID_LED_TO_CONTROLLER_VOLTAGE 0x01 // 电压监测
  19. // 第18~12位,目标nodeID,11~5位,源nodeID, ID最大0x7F
  20. #define DESTINATION_ID_MASK \
  21. 0x003F8000 // 0000 0000 0011 1111 1000 0000 0000 0000
  22. #define SOURCE_ID_MASK 0x00007F00 // 0000 0000 0000 0000 0111 1111 0000 0000
  23. #define CAN_NODEID_CONTROLLER 0x01 // 主控CANID
  24. #define CAN_NODEID_LED 0x02 // led灯板nodeid
  25. // 第4位帧开始标志,第3位帧结束标志
  26. #define CAN_MSG_STA 0x00000080
  27. #define CAN_MSG_END 0x00000040
  28. // 第2~0位,帧序号
  29. #define FRAME_SEQ_MASK 0x00000031 // 0000 0000 0000 0000 0000 0000 0011 1000
  30. ////////////////////////////////////////////////////////////////////////////////
  31. // CANmaskID,
  32. // maskID中为1的位,需要filterID和消息帧中对应位的值完全一样,才能通过过滤
  33. // 因此目标nodeID的位全置1, 其它位置暂不过滤
  34. #define CAN_CONTROLLER_MASK_ID 0x003F8006
  35. #define CAN_CONTROLLER_FILTER_ID ((unsigned int)CAN_NODEID_CONTROLLER << 15)
  36. enum can_ext_id_set
  37. {
  38. //莫之比智能-避障雷达UAVR20 前向
  39. CAN_UAVR20_1_MSG = (0x000EFF01),
  40. //莫之比智能-避障雷达UAVR20 后向
  41. CAN_UAVR20_2_MSG = (0x000EFF02),
  42. //莫之比智能-定高雷达UAVH30
  43. CAN_UAVH30_MSG = (0x000EFF0B),
  44. //莫之比智能-避障雷达UAVR21 前向
  45. CAN_UAVR21_1_MSG = 0x000EFF11,
  46. //莫之比智能-避障雷达UAVR21 后向
  47. CAN_UAVR21_2_MSG = 0x000EFF12,
  48. //莫之比系列扩展ID
  49. CAN_MICOB_FILTER_ID = 0x000EFF01,
  50. CAN_MICOB_MASK_ID = 0x1FFFFFE0,
  51. // 格式智能电池 ID
  52. CAN_TATTU_BMS_ID = (0x01109216),
  53. // 视觉模块
  54. CAN_VINS2FMU_MSG = (0X1662),
  55. CAN_FMU2VINS_MSG = (0X1661),
  56. // afc id
  57. CAN_MC2AFC_ID = 0x1664,
  58. CAN_AFC2MC_ID = 0x1663,
  59. // ulanding 雷达
  60. CAN_ULANDING_MSG = (0x90002),
  61. // V7PMU
  62. CAN_V7_PMU = 528472
  63. };
  64. enum can_std_id_set
  65. {
  66. //标准帧 11位 组成16位后面要加5(RTR+IDE+EXID[17:15]位
  67. CAN_NRA24_TARINFO = (0x70C),
  68. CAN_NRA24_TARSTAT = (0x70B),
  69. //标准帧 11位 组成16位后面要加5(RTR+IDE+EXID[17:15]位
  70. CAN_MR72_GENERAL = (0x60B),
  71. CAN_MR72_STATUS = (0x60A),
  72. // 吉利发动机 can id
  73. can_id_version_msg = 0x1C0,
  74. can_id_status_msg = 0x1C1,
  75. can_id_fault_msg = 0x1C2,
  76. can_id_ack_msg = 0x1C3,
  77. can_id_worktime_msg = 0x1C4,
  78. can_id_ctl_msg = 0x1A0,
  79. };
  80. /*----------------------------------------------------------------------------*/
  81. void CAN_BusInit(void);
  82. int canSendVkMsg(unsigned char *data, unsigned char length, unsigned int extid,
  83. uint16_t time_out_ms);
  84. int canSendMsg(can_transmit_buf_t *pTxMsg);
  85. void CanTxRxServicePoll(void);
  86. #endif