With bootloader

This commit is contained in:
lulko 2025-03-17 15:43:34 +03:00
parent b5ff05bed6
commit 023026987c
8 changed files with 312 additions and 141 deletions

View file

@ -165,19 +165,24 @@ void write_param(uint8_t param_id, uint8_t val){
__disable_irq();
flash_write(write_ptr,&param_flash);
write_ptr += FLASH_RECORD_SIZE;
flash_program_word(SECTOR_7 - sizeof(uint32_t),write_ptr,0);
// flash_program_word(SECTOR_7 - sizeof(uint32_t),write_ptr,0);
}
FLASH_RECORD* load_params(){
__disable_irq();
static FLASH_RECORD latest[PARAM_COUNT] = {0};
FLASH_RECORD res;
for(uint32_t addr = SECTOR_6;addr < SECTOR_7;addr +=FLASH_RECORD_SIZE) {
for(uint32_t addr = SECTOR_6;addr < SECTOR_6_END;addr +=FLASH_RECORD_SIZE) {
flash_read(addr,&res);
if (validate_crc(&res))
if (!validate_crc(&res))
break;
else{
latest[res.data_id] = res;
write_ptr = addr;
}
}
__enable_irq();
return latest;
}

View file

@ -103,7 +103,7 @@ void setup_foc(MagneticSensorAS5045 *encoder, BLDCMotor *motor,
void send_velocity() {
float current_velocity = motor.shaftVelocity();
uint8_t id = *(volatile uint8_t*)ADDR_VAR_ID;
uint8_t id = *(volatile uint8_t*)ADDR_VAR;
CAN_TX_msg.id = id;
CAN_TX_msg.buf[0] = 'V';
CAN_TX_msg.len = 5;
@ -113,7 +113,7 @@ void send_velocity() {
void send_angle() {
float current_angle = motor.shaftAngle();
uint8_t id = *(volatile uint8_t*)ADDR_VAR_ID;
uint8_t id = *(volatile uint8_t*)ADDR_VAR;
CAN_TX_msg.id = id;
CAN_TX_msg.buf[0] = 'A';
CAN_TX_msg.len = 5;
@ -122,7 +122,7 @@ void send_angle() {
}
void send_motor_enabled() {
uint8_t id = *(volatile uint8_t*)ADDR_VAR_ID;
uint8_t id = *(volatile uint8_t*)ADDR_VAR;
CAN_TX_msg.id = id;
CAN_TX_msg.buf[0] = 'E';
memcpy(&CAN_TX_msg.buf[1], &motor_control_inputs.motor_enabled,
@ -131,7 +131,7 @@ void send_motor_enabled() {
}
void send_foc_state() {
uint8_t id = *(volatile uint8_t*)ADDR_VAR_ID;
uint8_t id = *(volatile uint8_t*)ADDR_VAR;
CAN_TX_msg.id = id;
CAN_TX_msg.buf[0] = 'F';
memcpy(&CAN_TX_msg.buf[1], &motor_control_inputs.foc_state,
@ -142,7 +142,7 @@ Can.write(CAN_TX_msg);
void send_id() {
/* data for reading of firmware */
uint8_t id = *(volatile uint8_t*)ADDR_VAR_ID;
uint8_t id = *(volatile uint8_t*)ADDR_VAR;
CAN_TX_msg.id = id;
CAN_TX_msg.buf[0] = 'I';
memcpy(&CAN_TX_msg.buf[0], &id, sizeof(id));
@ -195,9 +195,7 @@ void send_data() {
void listen_can() {
flash_rec = load_params();
for(int i = 0;i < PARAM_COUNT;i++)
flash_buf[i] = flash_rec[i];
uint8_t reg_id = CAN_inMsg.buf[0]; //reg id
if (CAN_inMsg.id == flash_buf[addr_id].value) {
if (CAN_inMsg.buf[1] == REG_WRITE) {
@ -316,6 +314,9 @@ void setup() {
pEraseInit.Sector = ADDR_VAR; // Начальная страница
pEraseInit.NbSectors = 1;
pEraseInit.VoltageRange = VOLTAGE_RANGE_3;*/
flash_rec = load_params();
for(int i = 0;i < PARAM_COUNT;i++)
flash_buf[i] = flash_rec[i];
}
void loop() {
foc_step(&motor, &command);