Arduino_CAN
로딩중...
검색중...
일치하는것 없음
send.ino
이 파일의 문서화 페이지로 가기
1
9
10#include "minimac.h"
11#include <EEPROM.h>
12#include <SPI.h>
13#include <mcp_can.h>
14
20#define PROTECTED_ID 0x123
21
28const uint8_t SECRET_KEY[MINIMAC_KEY_LEN] = {0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F,
29 0x70, 0x81, 0x92, 0xA3, 0xB4, 0xC5,
30 0xD6, 0xE7, 0xF8, 0x09};
31
38MCP_CAN CAN(10);
39
51void setup() {
52 Serial.begin(115200);
53 while (!Serial)
54 ;
55
56 // EEPROM 전체 초기화
57 for (int i = 0; i < EEPROM.length(); i++) {
58 EEPROM.write(i, 0xFF);
59 }
60
61 // CAN 초기화 (all IDs, 500kbps, 16MHz)
62 if (CAN.begin(MCP_ANY, CAN_500KBPS, MCP_16MHZ) != CAN_OK) {
63 Serial.println("[ERROR] CAN Init Failed!");
64 for (;;)
65 ;
66 }
67 CAN.setMode(MCP_NORMAL);
68
69 // Mini-MAC 초기화 (fresh 상태로 시작)
71
72 Serial.println("[INFO] Sender Initialized");
73}
74
84void loop() {
85 // 예시 페이로드: 0xDE 0xAD 0xBE 0xEF
86 uint8_t buf[MINIMAC_MAX_DATA + MINIMAC_TAG_LEN];
87 uint8_t payloadLen = 4;
88 buf[0] = 0xDE;
89 buf[1] = 0xAD;
90 buf[2] = 0xBE;
91 buf[3] = 0xEF;
92
93 // Mini-MAC 태그 생성
94 uint8_t totalLen = minimac_sign(buf, payloadLen);
95
96 // CAN 전송
97 byte result = CAN.sendMsgBuf(PROTECTED_ID, 0, totalLen, buf);
98 if (result == CAN_OK) {
99 Serial.println("[INFO] Message sent");
100 } else {
101 Serial.println("[ERROR] Send failed");
102 }
103
104 delay(1000);
105}
uint8_t minimac_sign(uint8_t *data, uint8_t payload_len)
송신할 메시지에 Mini-MAC 태그 생성 및 내부 상태 갱신
Definition minimac.cpp:282
void minimac_init(uint16_t can_id, const uint8_t *key)
Mini-MAC 초기화 및 EEPROM 동기화
Definition minimac.cpp:241
#define MINIMAC_TAG_LEN
Mini-MAC 다이제스트에서 사용할 태그 길이 (4바이트, 32비트)
Definition minimac.h:25
#define MINIMAC_MAX_DATA
CAN 데이터 필드 최대 길이 (8바이트)
Definition minimac.h:35
#define MINIMAC_KEY_LEN
Mini-MAC HMAC 키 길이 (16바이트, 128비트)
Definition minimac.h:20
MCP_CAN CAN(10)
CAN 버스 제어 객체.
#define PROTECTED_ID
Mini-MAC 인증이 적용되는 보호 대상 CAN 메시지 식별자.
const uint8_t SECRET_KEY[16]
Mini-MAC 프로토콜에 사용되는 16바이트 비밀 키.
Mini-MAC 프로토콜 구현용 헤더 파일
void setup()
시스템 초기화 함수로, 장치 설정을 수행합니다.
Definition send.ino:51
MCP_CAN CAN(10)
CAN 버스 제어 객체.
void loop()
주기적으로 메시지를 생성하여 전송하는 메인 루프 함수입니다.
Definition send.ino:84