Tool/software:
Hi,
I'm implementing bsl using msp430fr2476.
I'm using msp430fr2476 as slave(bsl target) and the peripheral is i2c.
This is my main code.
1. set MCLK to 8MHz
2. initialize I2C as slave
3. jump to BSL
int main(void) {
// Stop watchdog timer
WDT_A_hold(WDT_A_BASE);
initClock(); // set MCLK to 8MHz
//__enable_interrupt();
UCB0_I2C_slave_init();
__disable_interrupt(); // disable interrupts
((void (*)())0x1000)(); // jump to BSL
while(true);
return 0;
}
When i send BSL command from master mcu(ESP32) to msp430fr2476, response data is all 0.
I changed BSL I2C address using BSL configuration. But the result is same.
This is i2c master code.
This code send mass erase cmd and i also send password cmd but result is same(all byte is 0).
int ret = 0;
int lcnt = 0;
uint8_t read[32] = {0, };
uint8_t writeb[32] = {0x80, 0x01, 0x00, 0x15, 0x64, 0xA3};
i2c_cmd_handle_t cmd = i2c_cmd_link_create();
ESP_LOGI(TAG, "bsl erase send");
ESP_LOG_BUFFER_HEXDUMP(TAG, writeb, 6, ESP_LOG_INFO);
i2c_master_start(cmd); // send start condition
i2c_master_write_byte(cmd, MSP430_BSL_ADDR << 1 | I2C_MASTER_WRITE, ACK_CHECK_EN); // slave address and write bit
i2c_master_write(cmd, writeb, 6, ACK_CHECK_EN); // write bsl mass erase cmd
i2c_master_start(cmd); // send start condition
i2c_master_write_byte(cmd, MSP430_BSL_ADDR << 1 | I2C_MASTER_READ, ACK_CHECK_EN); // slave address and read bit
i2c_master_read(cmd, read, 8, I2C_MASTER_LAST_NACK); // read
i2c_master_stop(cmd); // send stop condition
xSemaphoreTake(i2c_semaphore, portMAX_DELAY);
i2c_master_cmd_begin(I2C_MASTER_NUM, cmd, 0);
xSemaphoreGive(i2c_semaphore);
Is there anything else I should set up on the msp430 for bsl?
Or, Is my read method wrong?
Regards,
Youngjun.