在函数 SCI_Boot 第119行中,它正在从数据包中查找关键字,然后通过 ReadReservedFn ()抛出16个字节。
uint32_t SCI_Boot(uint32_t bootMode)
{
uint32_t entryAddress;
uint16_t byteData;
//
// CPU1 Patch/Escape Point 13
//
entryAddress = CPU1BROM_TI_OTP_ESCAPE_POINT_13;
if((entryAddress != 0xFFFFFFFFUL) &&
(entryAddress != 0x00000000UL))
{
//
// If OTP is programmed, then call OTP patch function
//
((void (*)(void))entryAddress)();
}
//
// Check if SCI is enabled on device or not
//
if((HWREG(DEVCFG_BASE + SYSCTL_O_DC8) & SYSCTL_DC8_SCI_A) == 0U)
{
return(FLASH_ENTRY_POINT);
}
//
// Assign GetWordData to the SCI-A version of the
// function. GetWordData is a pointer to a function.
//
GetWordData = SCIA_GetWordData;
//
// Initialize the SCI-A port for communications
// with the host.
//
//
// Enable the SCI-A clocks
//
SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_SCIA);
SysCtl_setLowSpeedClock(SYSCTL_LSPCLK_PRESCALE_4);
EALLOW;
HWREGH(SCIA_BASE + SCI_O_FFTX) = SCI_FFTX_SCIRST;
//
// 1 stop bit, No parity, 8-bit character
// No loopback
//
HWREGH(SCIA_BASE + SCI_O_CCR) = (SCI_CONFIG_WLEN_8 | SCI_CONFIG_STOP_ONE);
SCI_setParityMode(SCIA_BASE,SCI_CONFIG_PAR_NONE);
//
// Enable TX, RX, Use internal SCICLK
//
HWREGH(SCIA_BASE + SCI_O_CTL1) = (SCI_CTL1_TXENA | SCI_CTL1_RXENA);
//
// Disable RxErr, Sleep, TX Wake,
// Disable Rx Interrupt, Tx Interrupt
//
HWREGB(SCIA_BASE + SCI_O_CTL2) = 0x0U;
//
// Relinquish SCI-A from reset and enable TX/RX
//
SCI_enableModule(SCIA_BASE);
EDIS;
//
// GPIO INIT
//
SCIBOOT_configure_gpio(bootMode);
//
// CPU1 Patch/Escape Point 13
//
entryAddress = CPU1BROM_TI_OTP_ESCAPE_POINT_13;
if((entryAddress != 0xFFFFFFFFUL) &&
(entryAddress != 0x00000000UL))
{
//
// If OTP is programmed, then call OTP patch function
//
((void (*)(void))entryAddress)();
}
//
// Perform autobaud lock with the host.
// Note that if autobaud never occurs
// the program will hang in this routine as there
// is no timeout mechanism included.
//
SCI_lockAutobaud(SCIA_BASE);
//
// Read data
//
byteData = SCI_readCharBlockingNonFIFO(SCIA_BASE);
//
// Configure TX pin after autobaud lock
// (Performed here to allow SCI to double as wait boot)
//
GPIO_setPadConfig(SCI_gpioTx,GPIO_PIN_TYPE_PULLUP);
GPIO_setPinConfig(SCI_gpioTxPinConfig);
//
// Write data to request key
//
SCI_writeCharNonBlocking(SCIA_BASE,byteData);
//
// If the KeyValue was invalid, abort the load
// and return the flash entry point.
//
if(SCIA_GetWordData() != SCI_DATA_WORD_KEY)
{
return FLASH_ENTRY_POINT;
}
ReadReservedFn();
entryAddress = GetLongData();
CopyData();
return entryAddress;
}
在 serial_flash_programr.cpp 中、在解析和通信状态设置后、我的程序到达此行:
if (g_bf021 == true && g_bf2838x == true)//f021
调用 f021_DownloadKernel (),打开内核文件,运行 autobaudLock()并调用 loadProgram ()。
函数 loadProgram()刚开始下载字节。 似乎应该在某个位置调用 f021_SendPacket()。 我没有收到它吗?
SCI_Boot()也调用 CopyData(),它只读取数据,而 loadProgram()要回传每个字节。
谢谢。
John