请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430FR2476 工具与软件:
您好!
我正在使用 msp430fr2476实现 BSL。
我将 msp430fr2476用作从器件(BSL 目标)、外设为 i2c。
这是我的主代码。
1.将 MCLK 设置为8MHz
2.将 I2C 初始化为从设备
3.跳转至 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; }
当我 从主 MCU (ESP32)向 msp430fr2476发送 BSL 命令时、响应数据全为0。
我使用 BSL 配置更改了 BSL I2C 地址。 但结果是相同的。
这是 i2c 主代码。
这个代码发送批量擦除 cmd、并且我也发送密码 cmd、但结果是一样的(所有字节为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);
我还应该在 MSP430上为 BSL 设置什么其他设置吗?
或者、我的读取方法是否错误?
此致、
映军。