CN111857742A - 一种在苹果电脑os x系统下串口烧录stm32单片机的方法 - Google Patents

一种在苹果电脑os x系统下串口烧录stm32单片机的方法 Download PDF

Info

Publication number
CN111857742A
CN111857742A CN202010506930.XA CN202010506930A CN111857742A CN 111857742 A CN111857742 A CN 111857742A CN 202010506930 A CN202010506930 A CN 202010506930A CN 111857742 A CN111857742 A CN 111857742A
Authority
CN
China
Prior art keywords
serial port
burning
apple computer
terminal
chip microcomputer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202010506930.XA
Other languages
English (en)
Inventor
张芯
毛明春
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intelligent Automation Equipment Zhuhai Co Ltd
Intelligent Automation Zhuhai Co Ltd
Original Assignee
Intelligent Automation Equipment Zhuhai Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intelligent Automation Equipment Zhuhai Co Ltd filed Critical Intelligent Automation Equipment Zhuhai Co Ltd
Priority to CN202010506930.XA priority Critical patent/CN111857742A/zh
Publication of CN111857742A publication Critical patent/CN111857742A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation
    • G06F8/63Image based installation; Cloning; Build to order

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Read Only Memory (AREA)

Abstract

本发明提供了一种步骤简单、操作方便且成本低的在苹果电脑OS X系统下串口烧录STM32单片机的方法。本发明方法包括以下步骤:(1)将板卡上面的MCU芯片设置到烧录模式;(2)打开苹果电脑自带的终端软件,将工具拖进去终端,再将串口名复制进终端,最后将要烧录的固件也拖进终端,按回车键运行;(3)苹果电脑上的终端软件运行时,终端软件获取到的第一个参数作为串口去打开,第二个参数作为文件去打开,终端软件打开串口后,发送7F指令,让单片机进入UART模式,再发送指令获取指令集,根据擦除模式来擦除芯片;(4)擦除成功后,就将要烧录的固件分包,将每个包写入芯片对应的地址,结束烧录。本发明可应用于电子设备领域。

Description

一种在苹果电脑OS X系统下串口烧录STM32单片机的方法
技术领域
本发明涉及电子设备领域,尤其涉及一种在苹果电脑OS X系统下串口烧录STM32单片机的方法。
背景技术
目前整个行业都是使用Windows系统和Linux系统开发STM32单片机的FW(固件),网上也有很多对应的下载工具。但是对于OS X系统,因为使用的少,意法半导体等企业没有提供工具,网上也没有类似的工具。目前市面上没有运行在苹果电脑OS X系统下的对STM32单片机使用串口烧录的较好办法。
而现场只有苹果电脑或者非Windows系统和Linux系统的设备的情况下,需要对STM32单片机使用串口烧录则无法实现。为了改变这种情况,需要设计一种在OS X系统下串口烧录STM32单片机的的方法。
发明内容
本发明所要解决的技术问题是克服现有技术的不足,提供一种步骤简单、操作方便且成本低的在苹果电脑OS X系统下串口烧录STM32单片机的方法。
本发明所采用的技术方案是,该方法中,STM32单片机设置在产品的板卡上作为MCU芯片,本发明方法包括以下步骤:
(1)将板卡上面的MCU芯片设置到烧录模式:将MCU芯片的BOOT引脚拉高,再将MCU进行复位,并使用USB转串口线连接到苹果电脑;
(2)运行工具:打开苹果电脑自带的终端软件,将工具拖进去终端,再将串口名复制进终端,最后将要烧录的固件也拖进终端,按回车键运行;
(3)苹果电脑上的终端软件运行时,终端软件获取到的第一个参数作为串口去打开,第二个参数作为文件去打开,终端软件打开串口后,发送7F指令,让单片机进入UART模式,再发送指令获取指令集,判断支持的擦除模式,根据擦除模式来擦除芯片;
(4)擦除成功之后,就将要烧录的固件按128字节的大小进行分包,将每个包写入芯片对应的地址,返回成功之后,当就提示用户烧录成功时,结束烧录。
进一步地,所述步骤(2)中,所述工具为命令行软件工具。
再进一步地,所述步骤(2)中,所述固件的文件格式为Bin格式文件。
又进一步地,所述工具的编写语言为C语言,编译工具为Xcode Version 11.3.1(11C504),在OS X 10.15.4 (19E266)的运行环境下运行。
本发明的有益效果是:通过上述简单的方法,首先设置好MCU芯片处于烧录模式,然后通过开启苹果电脑上自带的软件,将设置好的工具和固件均拖入软件中并运行,再配置成UART模式将MCU芯片内的原有的内容擦除掉,然后将将要烧录的固件分包写入MCU芯片相应的地址,实现烧录,可见本发明方法步骤简单,操作方便,且无需其它额外的设备辅助,即可实现在苹果电脑OS X系统下串口烧录STM32单片机,大大地节省了成本,也提高了烧录速度。
具体实施方式
本发明方法中,该方法中,STM32单片机设置在产品的板卡上作为MCU芯片,该方法包括以下步骤:
(1)将板卡上面的MCU芯片设置到烧录模式:将MCU芯片的BOOT引脚拉高,再将MCU进行复位,并使用USB转串口线连接到苹果电脑。
(2)运行工具:打开苹果电脑自带的终端软件,将工具拖进去终端,再将串口名复制进终端,最后将要烧录的固件也拖进终端,按回车键运行,在这里,所述固件的文件格式为Bin格式文件。
(3)苹果电脑上的终端软件运行时,终端软件获取到的第一个参数作为串口去打开,第二个参数作为文件去打开,终端软件打开串口后,发送7F指令,让单片机进入UART模式,再发送指令获取指令集,判断支持的擦除模式,根据擦除模式来擦除芯片。
(4)擦除成功之后,就将要烧录的固件按128字节的大小进行分包,将每个包写入芯片对应的地址,返回成功之后,当就提示用户烧录成功时,结束烧录。
本发明中,所述工具的编写语言为C语言,编译工具为Xcode Version 11.3.1(11C504),在OS X 10.15.4 (19E266)的运行环境下运行。
所述步骤(2)中,所述工具为命令行软件工具。其代码实现如下。
// main.c
// Flash_Loader
//
// Created by Xin.Zhang on 14/4/2020.
// Copyright © 2020 Xin.Zhang. All rights reserved.
//
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <errno.h>
#include <string.h>
#define FALSE 1
#define TRUE 0
int Serial_Driver;
#define GetComnmand 0x00
#define GetVersion 0x01
#define GetID 0x02
#define WriteMemory 0x31
#define Readprotect 0x82
#define ReadUnprotect 0x92
#define Erase_Cmd 0x43
#define Extended_Erase 0x44
#define ACK 0x79
#define NACK 0x1f
int speed_arr[] = { B38400, B115200, B19200, B9600, B4800, B2400, B1200,B300, B38400, B19200, B9600, B4800, B2400, B1200, B300, };
int name_arr[] = {38400, 115200, 19200, 9600, 4800, 2400, 1200, 300,38400, 19200, 9600, 4800, 2400, 1200, 300, };
void Add_XOR_Value(uint8_t *buff,uint8_t Len)
{
uint8_t *p_buff=buff;
uint8_t XOR_Value=0xff;
if (Len==1)
{
XOR_Value=XOR_Value ^ *p_buff;
p_buff++;
}
else
{
XOR_Value=*p_buff;
p_buff++;
for (int i = 0; i < Len-1; ++i)
{
XOR_Value=XOR_Value ^ *p_buff;
p_buff++;
}
}
*p_buff=XOR_Value;
}
void set_speed(int fd, int speed) //Linux 下串口USB等设备通信编程入门2中有终端属性的获取设置函数
{
int i;
int status;
struct termios Opt;
tcgetattr(fd, &Opt);
for ( i= 0; i < sizeof(speed_arr) / sizeof(int); i++)
{
if (speed == name_arr[i])
{
tcflush(fd, TCIOFLUSH);//Update the options and do it NOW
cfsetispeed(&Opt, speed_arr[i]);
cfsetospeed(&Opt, speed_arr[i]);
status = tcsetattr(fd, TCSANOW, &Opt);
if (status != 0)
perror("tcsetattr fd1");
return;
}
tcflush(fd,TCIOFLUSH);
}
}
int set_Parity(int fd,int databits,int stopbits,int parity)
{
struct termios options;
if ( tcgetattr( fd,&options) != 0)
{
perror("SetupSerial 1");
return(FALSE);
}
options.c_cflag &= ~CSIZE; switch (databits) /*设置数据位数*/
{
case 7:
options.c_cflag |= CS7; break;
case 8:
options.c_cflag |= CS8; break;
default:
fprintf(stderr,"Unsupported data size\n");
return (FALSE);
}
switch (parity)
{
case 'n':
case 'N':
options.c_cflag &= ~PARENB;
options.c_iflag &= ~INPCK;
break;
case 'o':
case 'O':
//停止位为1或2位 N->无奇偶校验,O->奇校验 E->为偶校验,
options.c_cflag |= (PARODD | PARENB); /* 设置为奇效验*/
options.c_iflag |= INPCK;
break;
case 'e':
case 'E':
options.c_cflag |= PARENB;
options.c_cflag &= ~PARODD;
options.c_iflag |= INPCK;
break;
case 's':
case 'S': /*as no parity*/
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
break;
default:
fprintf(stderr,"Unsupported parity\n");
return (FALSE);
}
/* 设置停止位*/
switch (stopbits)
{
case 1:
options.c_cflag &= ~CSTOPB; break;
case 2:
options.c_cflag |= CSTOPB; break;
default:
fprintf(stderr,"Unsupported stop bits\n");
return (FALSE);
}
/* Set input parity option */
if (parity != 'n')
options.c_iflag |= INPCK;
options.c_cc[VTIME] = 0; // 15 seconds options.c_cc[VMIN] = 0;
/* Disnable parity checking */
/* Enable parity */ /* 转换为偶效验*/
/* Disnable parity checking */
tcflush(fd,TCIFLUSH); /* Update the options and do it NOW */
if (tcsetattr(fd,TCSANOW,&options) != 0)
{
perror("SetupSerial 3"); return (FALSE);
}
return (TRUE);
}
int OpenDev(char *Dev)
{
int fd = open( Dev, O_RDWR );
if (-1 == fd)
{
perror("Can't Open Serial Port");
return -1;
}
else
return fd;
}
void Serial_Write(uint8_t *Tx,uint32_t len)
{
#ifdef SW_Debug
printf("Serial Write:");
for (int i=0; i<len; i++)
{
printf("0x%X ",Tx[i]);
}
printf("\r\n");
#endif
write(Serial_Driver,Tx,len);
}
uint32_t Serial_Read(uint8_t *Rx,uint32_t len,uint32_t timeout)
{
uint32_t nread=0;
nread=read(Serial_Driver, Rx, len);
#ifdef SW_Debug
printf("Serial Read:");
for (int i=0; i<nread; i++)
{
printf("0x%X ",Rx[i]);
}
printf("\r\n");
#endif
return nread;
}
char ConnectDriverAddress(char *input ,char *output)
{
char tital[]="/dev/";
if (input[1]=='d' || input[1]=='D')
{
strcpy(output, input);
return TRUE;
}
else if(input[1]=='u')
{
strcpy(output, tital);
strcat(output, input);
return TRUE;
}
else
{
return FALSE;
}
}
char GoToBootloader()
{
uint8_t GoToISP=0x7f;
uint8_t Rx_buff[50]={0};
uint32_t timeout=0;
uint8_t nread=0;
Serial_Write(&GoToISP,1);
nread=Serial_Read( Rx_buff, 50,1000);
if(Rx_buff[0]==ACK && nread==1)
{
printf("Go to Bootloader Success\r\n");
return TRUE;
}
else
{
printf("Fail,Check Boot Mode!\r\n");
return FALSE;
}
}
char CheckErase(uint8_t *buff, uint8_t Len)
{
uint8_t *p_buff=buff;
for (int i = 0; i < 20; ++i)
{
if (*p_buff==0x43)
{
printf("Got Erase Command\r\n");
return 1;
}
else if (*p_buff==0x44)
{
printf("Got Extended Erase Command\r\n");
return 2;
}
p_buff++;
if (i>15)
{
printf("Can not find Erase Command\r\n");
return 11;
}
}
return 0;
}
char MCU_0X43_Erase(void)
{
uint8_t nread=0;
uint8_t Txbuff[3]={0};
uint8_t Rxbuff[30]={0};
Txbuff[0]=Erase_Cmd;
Add_XOR_Value(Txbuff,1);
Serial_Write(Txbuff,2);
nread=Serial_Read( Rxbuff, 20,100);
if (Rxbuff[0]==ACK)
{
memset(Rxbuff,0x00,20);
Txbuff[0]=0xff;
Add_XOR_Value(Txbuff,1);
Serial_Write(Txbuff,2);
nread=Serial_Read( Rxbuff, 20,100);
if (Rxbuff[0]==ACK)
{
printf("Erase OK\r\n");
return TRUE;
}
else
{
printf("Erase FAIL ON GLOBAL\r\n");
return FALSE;
}
}
else
{
printf("Erase Command NACK\r\n");
return FALSE;
}
}
char MCU_0X44_Erase(void)
{
uint8_t nread=0;
uint8_t Txbuff[3]={0};
uint8_t Rxbuff[30]={0};
Txbuff[0]=Extended_Erase;
Add_XOR_Value(Txbuff,1);
Serial_Write(Txbuff,2);
nread=Serial_Read( Rxbuff, 20,100);
if (Rxbuff[0]==ACK)
{
memset(Rxbuff,0x00,20);
Txbuff[0]=0xff;
Txbuff[1]=0xff;
Add_XOR_Value(Txbuff,2);
Serial_Write(Txbuff,3);
nread=Serial_Read( Rxbuff, 20,100);
if (Rxbuff[0]==ACK)
{
printf("Erase OK\r\n");
return TRUE;
}
else
{
printf("Erase FAIL ON GLOBAL\r\n");
return FALSE;
}
}
else
{
printf("Erase Command NACK\r\n");
return FALSE;
}
}
char MCU_0X31_Write(uint32_t Add, uint8_t *buff,uint8_t len)
{
uint8_t WriteCmd[2]={0x31,0xCE};
uint8_t AddBuff[5]={0};
uint8_t RxBuff[10]={0};
uint8_t nread=0;
AddBuff[0]=(uint8_t)((Add>>24) & 0x000000ff);
AddBuff[1]=(uint8_t)((Add>>16) & 0x000000ff);
AddBuff[2]=(uint8_t)((Add>>8) & 0x000000ff);
AddBuff[3]=(uint8_t)((Add) & 0x000000ff);
Add_XOR_Value(AddBuff, 4);
Serial_Write(WriteCmd,2);
nread=Serial_Read(RxBuff, 8, 100);
if (RxBuff[0]==ACK)
{
memset(RxBuff, 0x00, 10);
Serial_Write(AddBuff, 5);
nread=Serial_Read(RxBuff, 8, 100);
if (nread==1 && RxBuff[0]==ACK)
{
memset(RxBuff, 0x00, 10);
Serial_Write(buff,len);
nread=Serial_Read(RxBuff, 8, 100);
if (RxBuff[0]==ACK)
{
return TRUE;
}
else
{
return FALSE;
}
}
else
{
return FALSE;
}
}
else
{
return FALSE;
}
}
char MCU_Erase(void)
{
uint8_t nread=0;
uint8_t ret_Check,ret_Op=0;
uint8_t Rxbuff[30]={0};
uint8_t Txbuff[3]={0};
Txbuff[0]=GetComnmand;
Add_XOR_Value(Txbuff,1);
Serial_Write(Txbuff,2);
nread=Serial_Read( Rxbuff, 20,100);
ret_Check=CheckErase(Rxbuff,nread);
memset(Rxbuff,0x00,20);
if (ret_Check==1)
{
ret_Op=MCU_0X43_Erase();
}
else if(ret_Check==2)
{
ret_Op=MCU_0X44_Erase();
}
else
{
return FALSE;
}
return ret_Op;
}
char MCU_WriteMemory(char *FilePath,uint32_t Star_Address)
{
FILE *fd;
uint8_t TxBuff[130]={0};
uint32_t count=0;
uint8_t lev=0;
uint8_t len=0;
fd=fopen(FilePath,"r");
if(fd==NULL)
{
printf("Fail to open\r\n");
return FALSE;
}
while (!feof(fd))
{
len++;
TxBuff[len]= fgetc(fd);
#ifdef SW_Debug
printf("len %d: 0x%X\r\n",len,TxBuff[len]);
#endif
if (len==128)
{
TxBuff[0]=len-1;
Add_XOR_Value(TxBuff, 129);
if (MCU_0X31_Write(Star_Address, TxBuff, 130)==TRUE )
{
count++;
Star_Address=Star_Address+len;
len=0;
printf("Write %d 128Bytes\r\n",count);
}
else
{
return FALSE;
}
}
}
#ifdef SW_Debug
printf("Lever :%d\r\n",len);
#endif
if (len!=0)
{
lev=len%4;
len=len+(4-lev);
TxBuff[0]=len-1;
Add_XOR_Value(TxBuff, len+1);
if (MCU_0X31_Write(Star_Address, TxBuff, len+2)==TRUE )
{
count++;
printf("Write %d Bytes\r\n",len);
len=0;
}
else
{
fclose(fd);
return FALSE;
}
}
fclose(fd);
return TRUE;
}
int main(int argc, const char * argv[])
{
char *Version="V01";
char DriverAdd[30]={0};
printf("Hello, World!\n");
printf("Flash Loader %s\r\n",Version);
if (ConnectDriverAddress(argv[1],DriverAdd)==FALSE) //串口地址拼接
{
printf("Driver Address Error\r\n");
exit(0);
}
printf("Driver Address: %s\r\n",DriverAdd);
Serial_Driver = OpenDev(DriverAdd); //打开串口
if (Serial_Driver>0)
set_speed(Serial_Driver,115200); //设置通信速度
else
{
printf("Can't Open Serial Port!\n");
exit(0);
}
if (set_Parity(Serial_Driver,8,1,'E')== FALSE) // 8位数据,1位停止位,偶校验
{
printf("Set Parity Error\n");
exit(1);
}
printf("Open Serial OK\r\n");
if(GoToBootloader()==TRUE) //进入烧录模式的UART模式
{
if(MCU_Erase()==TRUE) //擦除MUC的Flash
{
if (MCU_WriteMemory(argv[2],0x08000000)==TRUE) //开始将程序分包写入单片机的内存地址中
{
printf("Flash Program Successful\r\n");
}
else
{
printf("Flash Program Fail\r\n");
}
}
else
{
printf("MCU Erase Fail\r\n");
}
}
close(Serial_Driver); //关闭串口
printf("If you have any question ,please contact with me by xin.zhang@cyg.com\r\n");
exit(0);
}。
本发明首先设置好MCU芯片处于烧录模式,然后通过开启苹果电脑上自带的软件,将设置好的工具和固件均拖入软件中并运行,再配置成UART模式将MCU芯片内的原有的内容擦除掉,然后将将要烧录的固件分包写入MCU芯片相应的地址,实现烧录,能够解决当现场只有苹果电脑的时候,不能烧录和更新单片机程序的问题。

Claims (4)

1.一种在苹果电脑OS X系统下串口烧录STM32单片机的方法,该方法中,STM32单片机设置在产品的板卡上作为MCU芯片,其特征在于,该方法包括以下步骤:
(1)将板卡上面的MCU芯片设置到烧录模式:将MCU芯片的BOOT引脚拉高,再将MCU进行复位,并使用USB转串口线连接到苹果电脑;
(2)运行工具:打开苹果电脑自带的终端软件,将工具拖进去终端,再将串口名复制进终端,最后将要烧录的固件也拖进终端,按回车键运行;
(3)苹果电脑上的终端软件运行时,终端软件获取到的第一个参数作为串口去打开,第二个参数作为文件去打开,终端软件打开串口后,发送7F指令,让单片机进入UART模式,再发送指令获取指令集,判断支持的擦除模式,根据擦除模式来擦除芯片;
(4)擦除成功之后,就将要烧录的固件按128字节的大小进行分包,将每个包写入芯片对应的地址,返回成功之后,当就提示用户烧录成功时,结束烧录。
2.根据权利要求1所述的一种在苹果电脑OS X系统下串口烧录STM32单片机的方法,其特征在于:所述步骤(2)中,所述工具为命令行软件工具。
3.根据权利要求1所述的一种在苹果电脑OS X系统下串口烧录STM32单片机的方法,其特征在于:所述步骤(2)中,所述固件的文件格式为Bin格式文件。
4.根据权利要求1所述的一种在苹果电脑OS X系统下串口烧录STM32单片机的方法,其特征在于:所述工具的编写语言为C语言,编译工具为Xcode Version 11.3.1 (11C504),在OS X 10.15.4 (19E266)的运行环境下运行。
CN202010506930.XA 2020-06-05 2020-06-05 一种在苹果电脑os x系统下串口烧录stm32单片机的方法 Pending CN111857742A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010506930.XA CN111857742A (zh) 2020-06-05 2020-06-05 一种在苹果电脑os x系统下串口烧录stm32单片机的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010506930.XA CN111857742A (zh) 2020-06-05 2020-06-05 一种在苹果电脑os x系统下串口烧录stm32单片机的方法

Publications (1)

Publication Number Publication Date
CN111857742A true CN111857742A (zh) 2020-10-30

Family

ID=72986128

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010506930.XA Pending CN111857742A (zh) 2020-06-05 2020-06-05 一种在苹果电脑os x系统下串口烧录stm32单片机的方法

Country Status (1)

Country Link
CN (1) CN111857742A (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20030025574A (ko) * 2001-09-21 2003-03-29 김철오 캔 통신을 이용한 원격 다중 직렬 통신 시스템 구현
CN102820061A (zh) * 2012-08-31 2012-12-12 东北大学 嵌入式远程设备程序烧写装置及方法
CN109240719A (zh) * 2017-07-03 2019-01-18 湖南大学 一种基于stm32的程序下载器
CN109857433A (zh) * 2019-01-15 2019-06-07 四川虹美智能科技有限公司 一种单片机软件升级工具和方法
CN110609690A (zh) * 2019-08-30 2019-12-24 珠海泰芯半导体有限公司 一种烧录器的烧录加速方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20030025574A (ko) * 2001-09-21 2003-03-29 김철오 캔 통신을 이용한 원격 다중 직렬 통신 시스템 구현
CN102820061A (zh) * 2012-08-31 2012-12-12 东北大学 嵌入式远程设备程序烧写装置及方法
CN109240719A (zh) * 2017-07-03 2019-01-18 湖南大学 一种基于stm32的程序下载器
CN109857433A (zh) * 2019-01-15 2019-06-07 四川虹美智能科技有限公司 一种单片机软件升级工具和方法
CN110609690A (zh) * 2019-08-30 2019-12-24 珠海泰芯半导体有限公司 一种烧录器的烧录加速方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
W何生: "单片机——mac下的开发环境搭建", pages 1 - 3, Retrieved from the Internet <URL:https://www.jianshu.com/p/1eb1e8965757> *

Similar Documents

Publication Publication Date Title
CN102033770B (zh) 移动终端的触摸屏固件升级方法及装置
CN204331708U (zh) 一种便携式设备和一种主机系统
CN112667320A (zh) 一种基于MicroBlaze的FPGA及DSP远程加载系统
CN110209419A (zh) 一种基于can总线的嵌入式dsp设备升级方法及装置
CN101330399A (zh) 嵌入式设备的升级方法
CN102446141B (zh) 用于实现写保护控制的装置和方法
CN101986266A (zh) Android手机操作系统移植到凌动处理器开发板的方法
CN106201605B (zh) 基于FPGA和PowerPC的FPGA启动加载FLASH升级系统及方法
CN1940802A (zh) 解除基本输入/输出系统写保护的系统及方法
CN104461638B (zh) 一种基于Bootloader的XFP光模块升级方法
CN111857742A (zh) 一种在苹果电脑os x系统下串口烧录stm32单片机的方法
CN102520993A (zh) 在特异硬件平台上移植通用引导装载程序的方法
CN101384063A (zh) 一种终端设备修复升级的方法与系统及其系统的制作方法
CN108694052B (zh) 一种固件升级方法、固件升级装置及固件升级系统
CN101788946B (zh) Cpld上连接有e2prom设备的固件烧结方法及装置
WO2024093542A1 (zh) Usb免驱通信方法、装置、电子设备及存储介质
CN111459468A (zh) 高可靠性串口通讯的dsp程序在线升级系统和方法
CN107332589A (zh) 一种基于蓝牙的固件升级装置
CN116756067A (zh) 基于鸿蒙分布式SoftBus的AI-EC嵌入式系统及其构建、部署方法
CN110750489A (zh) 一种在fpga中部署算子的方法、设备及介质
CN104991774A (zh) 一种uefi平台下截获系统引导的系统和方法
CN110286940B (zh) 智能电视日志生成方法
CN111294985A (zh) 一种基于4g的便携式矿灯通信系统、通信方法及构建方法
CN111638899A (zh) 一种通过dsp串口升级fpga程序的方法
CN112748946A (zh) 应用程序安装文件生成方法和装置、计算设备、存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination