我正在進行韌體的空中升級,但我不知道下載韌體和升級設備需要多長時間。所以我試著進入無限回圈while(1),檢查韌體是否已經完成升級。這把街上的設備搞得一團糟...... 另一個選擇是做超時,但超時多久?這是不可預知的。
問題是,如何確保真實性并正確地做到這一點?
以下是我所嘗試的:
signed char wait_commands(vu32 timeout, char*command, const char *result_command, int valueToCheck)
{
char *result = NULL;
timer_1sec = 0;
while(timer_1sec < timeout)
{
if( GSMGetString(tempdata, 5) == OK)
{
結果 = strstr(tempdata, command);
if ( result != NULL)
{
int value;
if ( result_command != NULL)
{
if( valueToCheck != 1)
{
if ( sscanf(result, result_command, & value) > 0)
{
if (value != valueToCheck)
{
return FEHLER;
}
else
{
return OK;
}
}
}
}
else
{
return OK。
}
}
}
}
return FEHLER;
}
u8 isUpdated(void)。
{
char *currentFirmwareVersion = "BG96MAR02A07M1G_01.019.01.019"/span>;
while (GSMCommand(" QGMR"/span>, tempdata, 20) != AT_OK)
;
if (strncmp(tempdata, currentFirmwareVersion, strlen(currentFirmwareVersion)) ==0)
{
isBG96Updated = 1;
}
else; }
{
isBG96Updated = 0;
}
return isBG96Updated;
}
signed char updateBG96FirmwareVersion(vu32 timeout)
{
char *url = ""http://10.10.169.1/dfota/upgrade.bin"。
char command[150] = {0};
signed char res = FEHLER;
if(isUpdated())
return OK。
sprintf(command, "AT QFOTADL=%s"/span>, url)。
PutStringUART(UART_GSM, command)。
PutCharUART(UART_GSM, '
')。
res = wait_commands(timeout, ""FOTA", "HTTPSTART"", NULL, -1)。
res = wait_commands(timeout, ""FOTA", "END"", ""FOTA", "END",%d", 0) 。
return res。
}
uj5u.com熱心網友回復:
我對Quectel BG96芯片沒有具體的經驗,但它似乎支持DFOTA,而且還有一份官方指南,你可以在這里查看/下載。
該指南包含了在空中升級韌體所需的AT命令。此外,我認為它可能會澄清你對升級程式的疑慮。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/332272.html
標籤:
