实验是基于stm32的msp430脱机编程器
向stm32的spi flish里写入用 iar生成的msp430的txt文本的16进制数据,数据代码是点亮msp430的一个led
然后通过stm32控制msp430 的bsl 往里边发送数据 来下载程序 实现脱机下载
Tx_Buffer里前100位存放的是用iar生成的一段代码的16进制数据。
void hong() 函数里是具体发送过程。
这是别人写好的代码 , 我这里有点问题不理解。我用iar软件生成的是一堆16进制数,
但是这个函数里开头用了这两个函数把数据分成了k1、k2两个数组来存放数据。 W25QXX_Read(BSLRxDataBlk1, FLASH_WriteAddress, BufferSize2); // k1[74] 0 74 1-74
W25QXX_Read(BSLRxDataBlk2, BufferSize2, BufferSize3); // k2[26] 74 26 74-100
这个函数是 读取前1-74的内容放入k1数组里
问题就在这,为什么我用iar生成的是一堆16进制数,这里为啥要把它拆成两次发送??
//--------------------------------下面是具体代码
u8 BSLErase[]={0x80,0x18,0x04,0x04,0x00,0xff,0x04,0xa5,0x7f,0xb9}; //檫除命令
u8 BSLTxDataBlk[]={0x80,0x14,0x04,0x04,0xf0,0x0f,0x0c,0x00,0x87,0xe0};//TX数据块
u8 BslPassword[]={0x80,0x10,0x24,0x24,0xe0,0xff,0x20,0x00, //密码
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x9b,0x34};
u8 Tx_Buffer[1000]={0x80,0x12,0x44,0x44,0x00,0xf0,0x40,0x00,0x31,0x40,0x00,0x04,0xb0,0x12,0x0c,0xf0,
0xb0,0x12,0x34,0xf0,0xb2,0x40,0x80,0x5a,0x20,0x01,0xe2,0x43,0x1a,0x00,0xe2,0x43,
0x19,0x00,0xe2,0xe3,0x19,0x00,0x3c,0x40,0x30,0x75,0xb0,0x12,0x28,0xf0,0xf9,0x3f,
0x0f,0x4c,0x0c,0x4f,0x3c,0x53,0x0f,0x93,0xfb,0x23,0x30,0x41,0x30,0x40,0x38,0xf0,
0x30,0x40,0x3c,0xf0,0xff,0x3f,0xff,0xff,0x0a,0x6c,0x80,0x12,0x14,0x14,0xf0,0xff,
0x10,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0x00,0xf0,0x74,0x09
void hong()
{
u8 i;
W25QXX_Read(BSLRxDataBlk1, FLASH_WriteAddress, BufferSize2);// k1[74] 0 74 0-74
W25QXX_Read(BSLRxDataBlk2, BufferSize2, BufferSize3); // k2[26] 74 26 74-100
bslEntrySeq(); //启动BSL时序
delay_ms(100);
USART_SendData(USART3,0x80); //同步队列 在向BSL 发送任何命令之前,一个值为80h的同步
//字符(SYNC) 必须被发送到BSL。需要这个字符来计算所有重要的内部参数,这些参数用于保持UART 和闪存存储器程序
//和擦除时间选择。它还提供了BSL 系统时间基准。当接收到这个字符之后,BSL 会发回一个DATA_ACK=90h 以确认接收成功。
delay_ms(100);
for(i=0;i<10;i++)
{
USART_SendData(USART3,BSLErase[i]); //檫除命令
while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
}
USART_SendData(USART3,0x80);
delay_ms(100);
for(i=0;i<42;i++)
{
USART_SendData(USART3,(uint8_t) BslPassword[i]); //密码
while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
}
USART_SendData(USART3,0x80);
delay_ms(100);
for(i=0;i<10;i++)
{
USART_SendData(USART3, (uint8_t) BSLTxDataBlk[i]); //TX数据块
while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
}
USART_SendData(USART3,0x80);
delay_ms(100);
for(i=0;i<BufferSize2;i++) // // i<74
{
USART_SendData(USART3, (uint8_t) BSLRxDataBlk1[i]);
while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
}
USART_SendData(USART3,0x80);
delay_ms(100);
for(i=0;i<BufferSize3;i++) // // i<26
{
USART_SendData(USART3, (uint8_t) BSLRxDataBlk2[i]);
while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
}
bslend(); //退出BSL时序
}
|
分段的原因,可能是BSL发送命令,最大数据好像是255。我最近也在研究这个,STM32可以和MSP430通信,但是我写入数据成功,但是去读取刚才写入的数据,就全是FF,你知道这个是为什么吗?着急呀!!!