当前位置:首页 > 单片机 > 单片机
[导读]  新PIC18 Bootloader  PhsBoot_v3.0是我最新用C语言实现的PIC bootloader, 采用串口通信,适用于PIC18, 并为其用C#写了PC端通信程序PhsLoader_v3.0。PhsLoader_v3.0通过串口按照自定义的通信协定发送数据PhsBoo

  新PIC18 Bootloader


  PhsBoot_v3.0是我最新用C语言实现的PIC bootloader, 采用串口通信,适用于PIC18, 并为其用C#写了PC端通信程序PhsLoader_v3.0。PhsLoader_v3.0通过串口按照自定义的通信协定发送数据PhsBoot_v3.0, PhsBoot_v3.0接收数据,按照通信协定解读数据,解读出其中Hex数据,并将其烧录到正确的位置。


  通信协定


  PIC18单片机端PhsBoot_v3.0和PC端PhsLoader_v3.0之间的通信数据包采用以下协定


...


  定义如下:


STX - Start of packet indicator

ETX - End of packet indicator

LEN - The length of true data

DATA - General data 16 bytes, only first LEN of datas are true

CMD - Base command

ADDR - Address up to 24 bits ( ADDRL , ADDRH , ADDRH)


  具体有以下Base command:


RD-VER: 0x00 -- Read Version Information (最终版本删除了此命令)

RD_MEM: 0x01 -- Read Program Memory (最终版本删除了此命令)

ER_MEM: 0x03 -- Erase Program Memory

WR_MEM: 0x02 -- Write Program Memory

WR_CFG: 0x04 -- Write Configuration Registers


  PhsLoader_v3.0 功能


  定义好了通讯协定, 接着就按照协定去实现PhsLoader_v3.0。 PhsLoader_v3.0的具体功能包括选择COM端口和BAUD RATE, 连接COM, 加载应用程序Hex文件,Parse 应用程序的Hex文件,一行一行解读Hex文件,然后按照通讯协定通过串口发送Hex记录到单片机,接收单片机发送回来的Response,发送完毕后断开COM连接,发送期间出现问题就立马结束发送。


  PhsLoader_v3.0 主要代码段


  PhsLoader_v3.0是用C#实现的,是我在利用空余时间自学C#后写的,上面提到的功能都实现了。




private void btnDownload_Click(object sender, EventArgs e)

{

btnDownload.Enabled = false;

pBarLoading.Visible = false;


if (!this.connect())

{

btnDownload.Enabled = true;

return;

}


try

{

loaderReader = new StreamReader(textBoxFile.Text);


}

catch (Exception ex)

{

Debug.WriteLine("Error: " + ex.Message);

textBoxStatus.ForeColor = Color.Red;

textBoxStatus.AppendText("Read hex file unsuccessfullyrn");

textBoxStatus.ForeColor = Color.Black;

loaderReader.Close();

loaderSerial.Close();

btnDownload.Enabled = true;

return;

}


loaderFrame = new SerialFrame();

if (!erase())

{

textBoxStatus.ForeColor = Color.Red;

textBoxStatus.AppendText("Erase unsuccessfullyrn");

textBoxStatus.ForeColor = Color.Black;

loaderReader.Close();

loaderSerial.Close();

btnDownload.Enabled = true;

return;

}


pBarLoading.Refresh();

pBarLoading.Visible = true;

pBarLoading.Value = 0;

pBarLoading.Maximum = loaderLines;

pBarLoading.Step = 1;


string recordLine;

Address_U = 0;

bool isNextLineUserID = false;

bool isNextLineConfigBits = false;

textBoxStatus.AppendText("rnDownloading hex file ...rn");

try

{

while (loaderReader.Peek() >= 0)

{

pBarLoading.PerformStep();

recordLine = loaderReader.ReadLine();

//if (recordLine.Contains(USER_ID_TOKEN) == true)

//{

// isNextLineUserID = true;

// continue;

//}

//else if (recordLine.Contains(CONFIG_BITS_TOKEN) == true)

//{

// isNextLineConfigBits = true;

// continue;

//}

if (recordLine.Contains(EXTEND_TOKEN) == true)

{

if (recordLine.Contains(USER_ID_TOKEN) == true)

{

isNextLineUserID = true;

continue;

}

else if (recordLine.Contains(CONFIG_BITS_TOKEN) == true)

{

isNextLineConfigBits = true;

continue;

}

else

{

const int ADDR_U_START_INDEX = 9;

const int ADDR_U_LENGTH = 4;

string addrU = recordLine.Substring(ADDR_U_START_INDEX, ADDR_U_LENGTH);

Address_U = Convert.ToInt32(addrU, 16) << 16;

continue;

}

}

else if (recordLine.Contains(END_OF_HEX_FILE_TOKEN) == true)

{

break;

}

if (isNextLineUserID)

{

isNextLineUserID = false;

// do nothing;

}

else if (isNextLineConfigBits)

{

if (!DownloadConfigLine(recordLine))

{

Debug.WriteLine("Error found during configuration bits programming");

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

嵌入式开发作为信息技术领域的重要分支,其涉及的语言种类繁多,各具特色。这些语言的选择取决于目标平台的特性、性能需求、开发者的熟练程度以及项目的具体要求。本文将详细介绍几种常见的嵌入式开发语言,包括C语言、C++、汇编语言...

关键字: 嵌入式开发 C语言

上位机串口通信是指在上位机(通常是计算机或微控制器)与外部设备之间通过串行通信协议进行数据传输和通信的过程。在串口通信中,数据以位为单位按顺序传送,通常使用一个或两个物理线路(通常是两条线)来实现数据的发送和接收。

关键字: 上位机 串口通信

串口通信(Serial Communication)是一种常用的数据传输方式,它通过串行数据线逐位传输数据,具有成本低、简单易用、可靠性高等优点。在工业控制、通信设备、嵌入式系统等领域得到广泛应用。

关键字: 串口通信 嵌入式系统

串口通信是一种常见的通信方式,用于在不同设备之间传输数据。它通过串行数据线(通常是一对TXD和RXD线)在设备之间进行通信。串口通信具有简单、可靠、成本低等优点,因此在工业控制、嵌入式系统、数据采集等领域得到广泛应用。

关键字: 串口通信 串口编程

串口通信是一种常见的通信方式,主要应用于计算机和其他设备之间的数据传输。它的主要原理是利用串行数据传输的方式,将数据一位一位地按顺序传输,而不是同时传输所有的数据。下面我们来看看串口通信的主要原理以及如何提高其传输速度。

关键字: 串口通信 串口速度

串口通信是一种常见的通信方式,它通过串行方式传输数据。串口通信的原理相对简单,主要涉及到数据位的传输和接收。在串口通信中,数据按照一定的波特率(baud rate)逐位传输。通常,一个字节的数据由8位组成,所以传输一个字...

关键字: 串口通信 波特率

RS 232串口通信是一种常见的串行通信协议,广泛应用于计算机和其他设备之间的数据传输。它是由美国电子工业协会(EIA)制定的一种标准,规定了数据传输的物理层和部分数据链路层的规范。

关键字: RS 232 串口通信

虽然 USB 几乎完全取代那些旧电缆和连接器,但 UART 绝对不会成为过去。您会发现许多 DIY 电子项目都使用 UART。

关键字: UART 串口通信 USB

STM32是一款由STMicroelectronics生产的微控制器系列,具有高性能、低功耗和丰富的外设资源。其中,串口通信是一种常用的通信方式,可以实现与其他设备之间的数据传输。

关键字: STM32 串口通信 微控制器

伴随物联网、车联网、人工智能等新兴应用领域的拓展和深化,智能家居、智慧楼宇、智慧城市和智能工业等行业快速发展,带动物联网无线模组需求释放,进而带动串口WiFi模块,BLE蓝牙模块以及ZigBee模块的需求增长

关键字: uart 串口通信 物联网
关闭
关闭