diff --git a/mcp2515.h b/mcp2515.h index 604cc52..6398196 100644 --- a/mcp2515.h +++ b/mcp2515.h @@ -56,6 +56,12 @@ typedef struct { uint16_t cs_pin; } MCP2515_HandleTypeDef; +typedef struct can_frame_s { + uint32_t can_id; /* 32 bit CAN_ID + EFF/RTR/ERR flags */ + uint8_t can_dlc; + uint8_t data[8]; +} can_frame_t; + void MCP2515_Init(MCP2515_HandleTypeDef* hcan, SPI_HandleTypeDef* hspi, GPIO_TypeDef* cs_port, uint16_t cs_pin); CAN_Error MCP2515_Reset(MCP2515_HandleTypeDef* hcan); uint8_t MCP2515_Get_Status(MCP2515_HandleTypeDef* hcan); diff --git a/mcp2515_consts.h b/mcp2515_consts.h index 018761d..4d06fc4 100644 --- a/mcp2515_consts.h +++ b/mcp2515_consts.h @@ -4,6 +4,32 @@ #include +/* special address description flags for the CAN_ID */ +#define CAN_EFF_FLAG 0x80000000UL /* EFF/SFF is set in the MSB */ +#define CAN_RTR_FLAG 0x40000000UL /* remote transmission request */ +#define CAN_ERR_FLAG 0x20000000UL /* error message frame */ + +/* valid bits in CAN ID for frame formats */ +#define CAN_SFF_MASK 0x000007FFUL /* standard frame format (SFF) */ +#define CAN_EFF_MASK 0x1FFFFFFFUL /* extended frame format (EFF) */ +#define CAN_ERR_MASK 0x1FFFFFFFUL /* omit EFF, RTR, ERR flags */ + +/* + * Controller Area Network Identifier structure + * + * bit 0-28 : CAN identifier (11/29 bit) + * bit 29 : error message frame flag (0 = data frame, 1 = error message) + * bit 30 : remote transmission request flag (1 = rtr frame) + * bit 31 : frame format flag (0 = standard 11 bit, 1 = extended 29 bit) + */ + +#define CAN_SFF_ID_BITS 11 +#define CAN_EFF_ID_BITS 29 + +/* CAN payload length and DLC definitions according to ISO 11898-1 */ +#define CAN_MAX_DLC 8 +#define CAN_MAX_DLEN 8 + /* * Speed 8M */