<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://community.element14.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Basics of Bootloader</title><link>https://community.element14.com/products/devtools/kinetiskl2freedomboard/w/documents/16960/basics-of-bootloader</link><description /><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>Basics of Bootloader</title><link>https://community.element14.com/products/devtools/kinetiskl2freedomboard/w/documents/16960/basics-of-bootloader</link><pubDate>Fri, 08 Oct 2021 07:51:25 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:8d221aa2-be5a-430e-8d7b-8c2efe05dd21</guid><dc:creator>bheemarao</dc:creator><comments>https://community.element14.com/products/devtools/kinetiskl2freedomboard/w/documents/16960/basics-of-bootloader#comments</comments><description>Current Revision posted to Documents by bheemarao on 10/8/2021 7:51:25 AM&lt;br /&gt;
&lt;p style="margin:0;"&gt;&lt;strong&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#627178;"&gt;What is a bootloader?&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;strong&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#627178;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin:0;margin-top:auto;margin-bottom:auto;"&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#51626f;"&gt;A bootloader is a program which is able to load another program (the application program). Typically, the bootloader program is not changed, and is kept in the microcontroller. That way the bootloader loads different program again and again. &lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0;margin-top:auto;margin-bottom:auto;"&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#51626f;"&gt;The following figure-1 shows a typical diagram of a serial bootloader:&lt;/span&gt;&lt;/p&gt;&lt;p align="center" style="margin:0;margin-bottom:3.75pt;text-align:center;"&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#51626f;"&gt;&lt;span&gt;&lt;a href="https://community.element14.com/resized-image/__size/373x411/__key/communityserver-wikis-components-files/00-00-00-01-49/contentimage_5F00_31598.jpg"&gt;&lt;img alt="image" src="https://community-storage.element14.com/communityserver-components-secureimagefileviewer/communityserver/wikis/components/files/00/00/00/01/49/contentimage_31598.jpg-373x411.jpg?sv=2016-05-31&amp;amp;sr=b&amp;amp;sig=mqek636oD3LNzzV5x%2FsnHinvs2C5Pqm4EGur%2F3To570%3D&amp;amp;se=2026-05-23T23%3A59%3A59Z&amp;amp;sp=r&amp;amp;_=yU9kJv2lH9WwJUdm5N8DNg==" style="max-height: 411px;max-width: 373px;" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="center" style="margin:0;margin-bottom:3.75pt;text-align:left;"&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#51626f;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:10pt;line-height:1.5em;"&gt;&lt;strong&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#51626f;"&gt;Figure 1: Serial Bootloader&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="center" style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0;margin-bottom:3.75pt;"&gt;&lt;strong&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#51626f;"&gt;Note:&lt;/span&gt;&lt;/strong&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#51626f;"&gt; Depending on the architecture, there can be a mini or micro bootloader that can load the real bootloader. For example, the OpenSDA bootloader on the Freedom boards have this capability.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0;margin-bottom:3.75pt;"&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#51626f;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0;margin-top:auto;margin-bottom:auto;"&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#51626f;"&gt;The &lt;strong&gt;Bootloader Code&lt;/strong&gt; and the &lt;strong&gt;Bootloader Vectors&lt;/strong&gt; are programmed into a new part (for example, with a debugger) or, a standalone flash programmer (for example, with USBDM). Then the bootloader can be used to load or change the &lt;strong&gt;Application Code&lt;/strong&gt; and &lt;strong&gt;Application Vectors&lt;/strong&gt;. With this, the bootloader remains the same, while the application can be updated.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0;margin-top:auto;margin-bottom:auto;"&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#51626f;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0;margin-top:7.2pt;margin-bottom:auto;"&gt;&lt;strong&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#627178;"&gt;What is Bootloader Sequence?&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin:0;margin-top:auto;margin-bottom:auto;"&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#51626f;"&gt;A typical bootloader has the following sequence:&lt;/span&gt;&lt;/p&gt;&lt;ol style="list-style-type:decimal;"&gt;&lt;li&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#51626f;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#51626f;"&gt;At the startup the bootloader either enters in a bootloader mode or in the application running mode. Typically, this is decided with a button or jumper set (or removed). If the bootloader starts in application running mode, it calls the required application and the system starts automatically. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#51626f;"&gt;Otherwise, the bootloader reprograms the application with a new file. The S19 (S-Record) files are often used for this, as they are easy to parse and every tool chain can produce them.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#51626f;"&gt;The bootloader needs to use a communication channel to read that file. That can be RS-232, USB or an SD card file system (e.g. FatFS).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#51626f;"&gt;Using that file, the bootloader programs the flash memory. Special consideration has to be taken into account for the application vector table. When the bootloader runs out of reset, it uses its own (default) vector table, and needs to relocate the vector table if running the application.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p style="margin:0;padding:0px;margin-bottom:3.75pt;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0;margin-bottom:3.75pt;"&gt;&lt;strong&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#51626f;"&gt;Tip:&lt;/span&gt;&lt;/strong&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#51626f;"&gt; It is possible to use the reset button on the FRDM-KL25Z board as a user. To keep things simple, you may use a dedicated bootloader push button on PTB8.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0;margin-top:auto;margin-bottom:auto;"&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#51626f;"&gt;The following figure-2 shows the Bootloader System Block Diagram:&lt;/span&gt;&lt;/p&gt;&lt;p align="center" style="margin:0;margin-bottom:3.75pt;text-align:center;"&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#51626f;"&gt;&lt;span&gt;&lt;a href="https://community.element14.com/resized-image/__size/488x436/__key/communityserver-wikis-components-files/00-00-00-01-49/contentimage_5F00_31599.jpg"&gt;&lt;img loading="lazy" alt="image" src="https://community-storage.element14.com/communityserver-components-secureimagefileviewer/communityserver/wikis/components/files/00/00/00/01/49/contentimage_31599.jpg-488x436.jpg?sv=2016-05-31&amp;amp;sr=b&amp;amp;sig=%2BXmg3zFvDGxaMHA2yiGbDqo4f8DeN9MV5jpWpDBpRxQ%3D&amp;amp;se=2026-05-23T23%3A59%3A59Z&amp;amp;sp=r&amp;amp;_=pEjR16hRhh09YDhl9WzA9Q==" style="max-height: 436px;max-width: 488px;" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="center" style="margin:0;margin-bottom:3.75pt;text-align:center;"&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#51626f;"&gt;&lt;/span&gt;&lt;strong&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#51626f;"&gt;Figure-2: Bootloader System Block Diagram&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0;margin-top:auto;margin-bottom:auto;"&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#51626f;"&gt;The components of the Bootloader System Block Diagram are as follows:&lt;/span&gt;&lt;/p&gt;&lt;ul style="list-style-type:disc;"&gt;&lt;li&gt;&lt;strong&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#51626f;"&gt;Communication Channel&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#51626f;"&gt;File Reader&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#51626f;"&gt;Flash Programming&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#51626f;"&gt;Vector Redirection&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;span lang="EN-US" style="font-size:12.0pt;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#51626f;"&gt;User Interface&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: freescale, kinetis, freedom&lt;/div&gt;
</description></item></channel></rss>