<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.mcselec.com/bavr/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.mcselec.com/bavr/index.php?action=history&amp;feed=atom&amp;title=%24LOADER%2Fde</id>
		<title>$LOADER/de - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.mcselec.com/bavr/index.php?action=history&amp;feed=atom&amp;title=%24LOADER%2Fde"/>
		<link rel="alternate" type="text/html" href="http://wiki.mcselec.com/bavr/index.php?title=$LOADER/de&amp;action=history"/>
		<updated>2026-05-02T03:27:28Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.18.6</generator>

	<entry>
		<id>http://wiki.mcselec.com/bavr/index.php?title=$LOADER/de&amp;diff=1964&amp;oldid=prev</id>
		<title>Admin: 1 revision</title>
		<link rel="alternate" type="text/html" href="http://wiki.mcselec.com/bavr/index.php?title=$LOADER/de&amp;diff=1964&amp;oldid=prev"/>
				<updated>2013-02-15T19:07:06Z</updated>
		
		<summary type="html">&lt;p&gt;1 revision&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='1' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
		&lt;td colspan='1' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 19:07, 15 February 2013&lt;/td&gt;
		&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://wiki.mcselec.com/bavr/index.php?title=$LOADER/de&amp;diff=1963&amp;oldid=prev</id>
		<title>Admin: Created page with &quot;= &lt;span style=&quot;font-size: 14pt; font-weight: bold;&quot;&gt;Action&lt;/span&gt; =  Instruct the compiler to create a boot loader at the specified address.  Can be used for all AVR that supp...&quot;</title>
		<link rel="alternate" type="text/html" href="http://wiki.mcselec.com/bavr/index.php?title=$LOADER/de&amp;diff=1963&amp;oldid=prev"/>
				<updated>2013-02-06T20:21:10Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;= &amp;lt;span style=&amp;quot;font-size: 14pt; font-weight: bold;&amp;quot;&amp;gt;Action&amp;lt;/span&amp;gt; =  Instruct the compiler to create a boot loader at the specified address.  Can be used for all AVR that supp...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== (**COPIED FROM ENGLISH PAGE**) === &amp;lt;span style=&amp;quot;font-size: 14pt; font-weight: bold;&amp;quot;&amp;gt;Action&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Instruct the compiler to create a boot loader at the specified address.&lt;br /&gt;
&lt;br /&gt;
Can be used for all AVR that support a boot loader like ATMEGA and ATXMEGA chips.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Syntax&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;f_Syntax&amp;quot;&amp;gt;$LOADER&amp;lt;/span&amp;gt;&amp;amp;nbsp;= address&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Remarks&amp;lt;/span&amp;gt; =&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px 0px 0px 4px;&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;604&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 2px solid rgb(0, 0, 0); border-spacing: 0px; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;15%&amp;quot; style=&amp;quot;width: 88px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
address&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;97%&amp;quot; style=&amp;quot;width: 507px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
The address where the boot loader is located. You can find this address in the data sheet.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A lot of AVR microcontrollers are configured such that it is possible to use a boot&lt;br /&gt;
&lt;br /&gt;
loader able to receive firmware updates and to reprogram the Flash memory on&lt;br /&gt;
&lt;br /&gt;
demand.&lt;br /&gt;
&lt;br /&gt;
These AVR which support boot loader have a so called boot section.&lt;br /&gt;
&lt;br /&gt;
Normally a chip will start at address 0 when it resets.&lt;br /&gt;
&lt;br /&gt;
This is also called the reset vector.&lt;br /&gt;
&lt;br /&gt;
Chips that have a boot section, split the flash memory in two parts. The boot section is a small part of the normal flash and by setting a fuse bit you select that the chip runs code at the boot sector when it resets instead of the normal reset vector.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
The Program Flash memory space of ATXMEGA chips is also divided into Application and Boot sections. Both sections&lt;br /&gt;
&lt;br /&gt;
have dedicated Lock Bits for setting restrictions on write or read/write operations.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
ATXMEGA Program Flash memory parts:&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;baseline&amp;quot; style=&amp;quot;vertical-align: baseline;&amp;quot;&lt;br /&gt;
| width=&amp;quot;15&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 10pt;&amp;quot;&amp;gt;1.&amp;lt;/span&amp;gt;&lt;br /&gt;
| Application Section for application code&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;baseline&amp;quot; style=&amp;quot;vertical-align: baseline;&amp;quot;&lt;br /&gt;
| width=&amp;quot;15&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 10pt;&amp;quot;&amp;gt;2.&amp;lt;/span&amp;gt;&lt;br /&gt;
| Application Table Section for application code or data storage&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;baseline&amp;quot; style=&amp;quot;vertical-align: baseline;&amp;quot;&lt;br /&gt;
| width=&amp;quot;15&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 10pt;&amp;quot;&amp;gt;3.&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-weight: bold;&amp;quot;&amp;gt;Boot Section&amp;lt;/span&amp;gt;&amp;amp;nbsp;for application code or bootloader code&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
[[File:Notice.jpg|left|Notice.jpg]]You need to set the fuse bits so the chip jump to the boot loader address at reset (&amp;lt;span style=&amp;quot;font-size: 9pt; font-family: Arial;&amp;quot;&amp;gt;BOOTRST)&amp;lt;/span&amp;gt;&amp;amp;nbsp;!&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Some chips also have fuse bits to select the size of the boot loader (e.g. 1024 words, 2048 words, 4096 words)&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
The boot loader start address depends also on the boot size.&lt;br /&gt;
&lt;br /&gt;
You can find following information in the data sheet of the device (example for&amp;amp;nbsp;&amp;lt;span style=&amp;quot;font-weight: bold;&amp;quot;&amp;gt;ATMEGA644&amp;lt;/span&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
{| id=&amp;quot;644&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; style=&amp;quot;border: none; border-spacing: 0px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;118&amp;quot; style=&amp;quot;width: 118px;&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 9pt; font-family: Arial; font-weight: bold;&amp;quot;&amp;gt;Boot Size&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;196&amp;quot; style=&amp;quot;width: 196px;&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 9pt; font-family: Arial; font-weight: bold;&amp;quot;&amp;gt;Boot Loader Flash Section&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;295&amp;quot; style=&amp;quot;width: 295px;&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 9pt; font-family: Arial; font-weight: bold;&amp;quot;&amp;gt;Boot Reset Address (Start Boot Loader Section)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;118&amp;quot; style=&amp;quot;width: 118px;&amp;quot; | &lt;br /&gt;
512 words&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;196&amp;quot; style=&amp;quot;width: 196px;&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 9pt; font-family: Arial;&amp;quot;&amp;gt;0x7E00 - 0x7FFF&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;295&amp;quot; style=&amp;quot;width: 295px;&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;$loader&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;$7E00&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;118&amp;quot; style=&amp;quot;width: 118px;&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;background-color: rgb(255, 255, 0);&amp;quot;&amp;gt;1024 words&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;196&amp;quot; style=&amp;quot;width: 196px;&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 9pt; font-family: Arial;&amp;quot;&amp;gt;0x7C00 - 0x7FFF&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;295&amp;quot; style=&amp;quot;width: 295px;&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;$loader&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;$7C00&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;118&amp;quot; style=&amp;quot;width: 118px;&amp;quot; | &lt;br /&gt;
2048 words&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;196&amp;quot; style=&amp;quot;width: 196px;&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 9pt; font-family: Arial;&amp;quot;&amp;gt;0x7800 - 0x7FFF&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;295&amp;quot; style=&amp;quot;width: 295px;&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;$loader&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;$7800&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;118&amp;quot; style=&amp;quot;width: 118px;&amp;quot; | &lt;br /&gt;
4096 words&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;196&amp;quot; style=&amp;quot;width: 196px;&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 9pt; font-family: Arial;&amp;quot;&amp;gt;0x7000 - 0x7FFF&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;295&amp;quot; style=&amp;quot;width: 295px;&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;$loader&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;$7000&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
For ATXMEGA chips like ATXMEGA32A4 the boot section is part of the Flash Program Memory.&lt;br /&gt;
&lt;br /&gt;
You can find following information in the data sheet of the ATXMEGA device under Flash Program Memory&lt;br /&gt;
&lt;br /&gt;
(example for ATxmega16A4 .....ATxmega128A4):&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
{| id=&amp;quot;644&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; style=&amp;quot;border: none; border-spacing: 0px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;118&amp;quot; style=&amp;quot;width: 118px;&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 9pt; font-family: Arial; font-weight: bold;&amp;quot;&amp;gt;Chip&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;196&amp;quot; style=&amp;quot;width: 196px;&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 9pt; font-family: Arial; font-weight: bold;&amp;quot;&amp;gt;Boot Loader Flash Section&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;295&amp;quot; style=&amp;quot;width: 295px;&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 9pt; font-family: Arial; font-weight: bold;&amp;quot;&amp;gt;Boot Reset Address (Start Boot Loader Section)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;118&amp;quot; style=&amp;quot;width: 118px;&amp;quot; | &lt;br /&gt;
ATxmega16A4&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;196&amp;quot; style=&amp;quot;width: 196px;&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 9pt; font-family: Arial;&amp;quot;&amp;gt;0x2000 - 0x7FFF&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;295&amp;quot; style=&amp;quot;width: 295px;&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;$loader&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;&amp;amp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;H2000&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;118&amp;quot; style=&amp;quot;width: 118px;&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;background-color: rgb(255, 255, 0);&amp;quot;&amp;gt;ATxmega32A4&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;196&amp;quot; style=&amp;quot;width: 196px;&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 9pt; font-family: Arial;&amp;quot;&amp;gt;0x4000 - 0x&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 9pt; font-family: Helvetica;&amp;quot;&amp;gt;47FF&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;295&amp;quot; style=&amp;quot;width: 295px;&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;$loader&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;&amp;amp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;H4000&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;118&amp;quot; style=&amp;quot;width: 118px;&amp;quot; | &lt;br /&gt;
ATxmega64A4&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;196&amp;quot; style=&amp;quot;width: 196px;&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 9pt; font-family: Arial;&amp;quot;&amp;gt;0x8000 - 0x&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 9pt; font-family: Helvetica;&amp;quot;&amp;gt;87FF&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;295&amp;quot; style=&amp;quot;width: 295px;&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;$loader&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;&amp;amp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;H8000&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;118&amp;quot; style=&amp;quot;width: 118px;&amp;quot; | &lt;br /&gt;
ATxmega128A4&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;196&amp;quot; style=&amp;quot;width: 196px;&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 9pt; font-family: Arial;&amp;quot;&amp;gt;0x10000 - 0x&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 9pt; font-family: Helvetica;&amp;quot;&amp;gt;10FFF&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;295&amp;quot; style=&amp;quot;width: 295px;&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;$loader&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;&amp;amp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;H10000&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 16pt; font-family: Helvetica-Bold; font-weight: bold;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
[[File:Notice.jpg|left|Notice.jpg]]An external programmer is needed to program the boot loader into the chip. After the fuse bits are set and the boot loader is programmed you do not need the external programmer anymore for this chip (except you want to change the fuse bits).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The MCS boot loader sample is a serial boot loader that uses the serial port (USART).&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
With ATXMEGA or with ATMEGA with more then one USART you can choose which USART (COM port) should be used with the boot loader.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(0, 128, 0);&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example you can use COM7 with an ATXMEGA:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;Config&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;Com7&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;57600&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;Mode&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;Asynchroneous&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;Parity&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;None&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;Stopbits&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;1&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;Databits&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;8 &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(0, 128, 0);&amp;quot;&amp;gt;'&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(0, 128, 128);&amp;quot;&amp;gt;&amp;quot;COM7:&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;For&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;Binary&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;As&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;#&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;7&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Notice.jpg|left|Notice.jpg]]When using another UART as COM1 do not forget to add the Interface number (in this example&amp;amp;nbsp;&amp;lt;span style=&amp;quot;font-weight: bold;&amp;quot;&amp;gt;#7&amp;lt;/span&amp;gt;) to all the Serial IO functions like&amp;lt;span class=&amp;quot;f_ImageCaption&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;Waitkey&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;(#&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;7&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;)&amp;amp;nbsp;&amp;lt;/span&amp;gt;or&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;Print&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;#&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;7&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;Chr&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;bstatus&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;);&amp;amp;nbsp;&amp;lt;/span&amp;gt;in the boot loader example&amp;lt;br/&amp;gt;&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
The boot loader uses the X-modem checksum protocol to receive the data. (XModem protocol (packet size = 128))&lt;br /&gt;
&lt;br /&gt;
Most terminal emulators can send X-modem checksum.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
The Boot loader sample can upload both normal flash programs and EEPROM images.&lt;br /&gt;
&lt;br /&gt;
The Boot loader sends a byte with value of 123 to the AVR Boot loader. This boot loader program then enter the boot loader or will jump to the reset vector (0000) to execute the normal flash program.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When it receives 124 instead of 123, it will upload the EEPROM.&lt;br /&gt;
&lt;br /&gt;
When you select a BIN file the flash will be uploaded. When you select an EEP file, the EEPROM will be uploaded.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following sample is written so it supports all chips with a boot section.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-weight: bold;&amp;quot;&amp;gt;How you need to use this ATMEGA boot loader &amp;amp;nbsp;example program:&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;baseline&amp;quot; style=&amp;quot;vertical-align: baseline;&amp;quot;&lt;br /&gt;
| width=&amp;quot;15&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 10pt;&amp;quot;&amp;gt;1.&amp;lt;/span&amp;gt;&lt;br /&gt;
| Uncomment the Chip type and&amp;amp;nbsp;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;Const&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;Loaderchip&amp;amp;nbsp;&amp;lt;/span&amp;gt;you want to use (for example ATMEGA644)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;$regfile&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(0, 128, 128);&amp;quot;&amp;gt;&amp;quot;m644def.dat&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(0, 128, 0);&amp;quot;&amp;gt;'$regfile = &amp;quot;m644Pdef.dat&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;Const&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;Loaderchip&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;644&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;baseline&amp;quot; style=&amp;quot;vertical-align: baseline;&amp;quot;&lt;br /&gt;
| width=&amp;quot;15&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 10pt;&amp;quot;&amp;gt;2.&amp;lt;/span&amp;gt;&lt;br /&gt;
| Double check the baud rate and COM port you want to use&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;baseline&amp;quot; style=&amp;quot;vertical-align: baseline;&amp;quot;&lt;br /&gt;
| width=&amp;quot;15&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 10pt;&amp;quot;&amp;gt;3.&amp;lt;/span&amp;gt;&lt;br /&gt;
| Compile the boot loader example&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;baseline&amp;quot; style=&amp;quot;vertical-align: baseline;&amp;quot;&lt;br /&gt;
| width=&amp;quot;15&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 10pt;&amp;quot;&amp;gt;4.&amp;lt;/span&amp;gt;&lt;br /&gt;
| Program it into the chip with an external programmer like AVR ISP MKII&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;baseline&amp;quot; style=&amp;quot;vertical-align: baseline;&amp;quot;&lt;br /&gt;
| width=&amp;quot;15&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 10pt;&amp;quot;&amp;gt;5.&amp;lt;/span&amp;gt;&lt;br /&gt;
| Select&amp;amp;nbsp;[[MCS Bootloader|MCS Bootloader]]&amp;amp;nbsp;from programmer (select the right COM Port and baud rate)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;baseline&amp;quot; style=&amp;quot;vertical-align: baseline;&amp;quot;&lt;br /&gt;
| width=&amp;quot;15&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 10pt;&amp;quot;&amp;gt;6.&amp;lt;/span&amp;gt;&lt;br /&gt;
| compile a new program or example for this chip&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;baseline&amp;quot; style=&amp;quot;vertical-align: baseline;&amp;quot;&lt;br /&gt;
| width=&amp;quot;15&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 10pt;&amp;quot;&amp;gt;7.&amp;lt;/span&amp;gt;&lt;br /&gt;
| reset the chip&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(0, 128, 0);&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(0, 128, 0);&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-weight: bold;&amp;quot;&amp;gt;Ways to reset the AVR chip:&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-weight: bold;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-weight: bold;&amp;quot;&amp;gt;Hardware reset:&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;baseline&amp;quot; style=&amp;quot;vertical-align: baseline;&amp;quot;&lt;br /&gt;
| width=&amp;quot;15&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 10pt;&amp;quot;&amp;gt;1.&amp;lt;/span&amp;gt;&lt;br /&gt;
| Hardware Reset switch/button to GND (manual)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;baseline&amp;quot; style=&amp;quot;vertical-align: baseline;&amp;quot;&lt;br /&gt;
| width=&amp;quot;15&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 10pt;&amp;quot;&amp;gt;2.&amp;lt;/span&amp;gt;&lt;br /&gt;
| MCS Bootloader can set and reset the DTR or RTS line of serial COM port which can be used to reset the AVR (automatic)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-weight: bold;&amp;quot;&amp;gt;Software Reset:&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;baseline&amp;quot; style=&amp;quot;vertical-align: baseline;&amp;quot;&lt;br /&gt;
| width=&amp;quot;15&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 10pt;&amp;quot;&amp;gt;1.&amp;lt;/span&amp;gt;&lt;br /&gt;
| Reset with Watchdog Timer (e.g. setting the Watchdog to 16ms, start it and let it time out)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;baseline&amp;quot; style=&amp;quot;vertical-align: baseline;&amp;quot;&lt;br /&gt;
| width=&amp;quot;15&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 10pt;&amp;quot;&amp;gt;2.&amp;lt;/span&amp;gt;&lt;br /&gt;
| With&amp;amp;nbsp;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;GOTO&amp;lt;/span&amp;gt;&amp;amp;nbsp;command (e.g. when ATMEGA644 is used the boot loader start at $7c00 (&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;$loader&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;$7c00).&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;Then&amp;lt;/span&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;you &amp;amp;nbsp;can use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;&amp;amp;nbsp;GOTO&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;&amp;amp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;H7c00&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp; to jump to the boot loader start.&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;baseline&amp;quot; style=&amp;quot;vertical-align: baseline;&amp;quot;&lt;br /&gt;
| width=&amp;quot;15&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 10pt;&amp;quot;&amp;gt;3.&amp;lt;/span&amp;gt;&lt;br /&gt;
| With ATXMEGA there is a special register to reset the ATXMEGA via software. See also topic ATXMEGA&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;baseline&amp;quot; style=&amp;quot;vertical-align: baseline;&amp;quot;&lt;br /&gt;
| width=&amp;quot;15&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 10pt;&amp;quot;&amp;gt;4.&amp;lt;/span&amp;gt;&lt;br /&gt;
| With MCS Bootloader you can send one or several ASCII character to reset the chip like with string &amp;quot;boot_me&amp;quot;. In this case the &amp;quot;boot_me&amp;quot; must be detected in your main application on the AVR and then use for example Watchdog or GOTO to reset the chip.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
The boot loader is written to work at a baud rate of 57600. This baud rate works for most chips that use the internal oscillator. But it is best to check it first with a simple program. When you use a crystal you might even use a higher baud rate.&lt;br /&gt;
&lt;br /&gt;
You can change this by changing the baud rate in the boot loader example (take care to use also the same baud rate in the boot loader application (e.g.&amp;amp;nbsp;[[MCS Bootloader|MCS Bootloader]]) on the PC side)&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Now make a new test program and compile it. Press&amp;amp;nbsp;&amp;lt;span style=&amp;quot;font-weight: bold;&amp;quot;&amp;gt;F4&amp;lt;/span&amp;gt;&amp;amp;nbsp;to start the&amp;amp;nbsp;[[MCS Bootloader|MCS bootloader]]. You now need to reset the chip so that it will start the boot loader section. The boot loader will send a byte with value of 123 and the Bascom boot loader receives this and thus starts the loader process.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There will be a stand alone boot loader available too. And the sample will be extended to support other AVR chips with boot section too.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
[[File:Notice.jpg|left|Notice.jpg]]&amp;amp;nbsp;There is a $BOOT directive too. It is advised to use $LOADER as it allows you to write the boot loader in BASIC.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Important.jpg|left|Important.jpg]]You can not use interrupts in your boot loader program as the interrupts will point to the reset vector which is located in the lower section of the flash. When you start to writing pages, you overwrite this part.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
[[File:Notice.jpg|left|Notice.jpg]]Take care when Watchdog is enabled by fuse bits and using a boot loader. You need to reset or deactivate the Watchdog in the boot loader example otherwise the firmware upload could be terminated by watchdog reset&amp;amp;nbsp;!&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
[[File:Notice.jpg|left|Notice.jpg]]If you want to analyze the MCU Control and Status Register to know which reset source caused the reset you need to save this register already in the boot loader example because this register will be cleared and it will be always 0 when you check it at start of your application.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
[[File:Notice.jpg|left|Notice.jpg]]When you use a boot loader it will use space from the available flash memory. The compiler does not know if you use a boot loader or not. When your program exceeds the available space and runs into the boot sector space, it will overwrite the boot loader.&lt;br /&gt;
&lt;br /&gt;
The&amp;amp;nbsp;[[$LOADERSIZE]]&amp;amp;nbsp;directive will take the boot loader size into account so you will get an error when the target file gets too big.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Encryption/Decryption with Bootloader:&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
You can use for example AES or XTEA (&amp;amp;nbsp;[[XTEADECODE]],&amp;amp;nbsp;[[XTEAENCODE]]&amp;amp;nbsp;) in combination with boot loader examples.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;There is an AES with boot loader and AVR-DOS example in the ...BASCOM-AVR\SAMPLES\boot &amp;amp;nbsp; &amp;amp;nbsp; folder (xmega_dos_boot_AES.zip).&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;See also&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
[[$BOOT]]&amp;amp;nbsp;,&amp;amp;nbsp;[[$LOADERSIZE]],&amp;amp;nbsp;[[MCS Bootloader|MCS Bootloader]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;There is an example for ATMEGA chips and for ATXMEGA Chips:&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;ATMEGA Example:&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;source lang=&amp;quot;bascomavr&amp;quot;&amp;gt;&lt;br /&gt;
'----------------------------------------------------------------&lt;br /&gt;
' (c) 1995-2009, MCS&lt;br /&gt;
' Bootloader.bas&lt;br /&gt;
' This sample demonstrates how you can write your own bootloader&lt;br /&gt;
' in BASCOM BASIC&lt;br /&gt;
' VERSION 2 of the BOOTLOADER. The waiting for the NAK is stretched&lt;br /&gt;
' further a bug was resolved for the M64/M128 that have a big page size&lt;br /&gt;
'-----------------------------------------------------------------&lt;br /&gt;
'This sample will be extended to support other chips with bootloader&lt;br /&gt;
'The loader is supported from the IDE&lt;br /&gt;
 &lt;br /&gt;
$crystal = 8000000&lt;br /&gt;
'$crystal = 14745600&lt;br /&gt;
$baud = 57600 'this loader uses serial com&lt;br /&gt;
'It is VERY IMPORTANT that the baud rate matches the one of the boot loader&lt;br /&gt;
'do not try to use buffered com as we can not use interrupts&lt;br /&gt;
 &lt;br /&gt;
'possible return codes of the PC bootloader.exe&lt;br /&gt;
' -6005 Cancel requested&lt;br /&gt;
' -6006 Fatal time out&lt;br /&gt;
' -6007 Unrecoverable event during protocol&lt;br /&gt;
' -6008 Too many errors during protocol&lt;br /&gt;
' -6009 Block sequence error in Xmodem&lt;br /&gt;
' -6016 Session aborted&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
'$regfile = &amp;quot;m8def.dat&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
'Const Loaderchip = 8&lt;br /&gt;
'$regfile = &amp;quot;m168def.dat&amp;quot;&lt;br /&gt;
'Const Loaderchip = 168&lt;br /&gt;
 &lt;br /&gt;
'$regfile = &amp;quot;m16def.dat&amp;quot;&lt;br /&gt;
'Const Loaderchip = 16&lt;br /&gt;
 &lt;br /&gt;
'$regfile = &amp;quot;m32def.dat&amp;quot;&lt;br /&gt;
'Const Loaderchip = 32&lt;br /&gt;
 &lt;br /&gt;
'$regfile = &amp;quot;m88def.dat&amp;quot;&lt;br /&gt;
'Const Loaderchip = 88&lt;br /&gt;
 &lt;br /&gt;
'$regfile = &amp;quot;m162def.dat&amp;quot;&lt;br /&gt;
'Const Loaderchip = 162&lt;br /&gt;
 &lt;br /&gt;
'$regfile = &amp;quot;m8515.dat&amp;quot;&lt;br /&gt;
'Const Loaderchip = 8515&lt;br /&gt;
 &lt;br /&gt;
'$regfile = &amp;quot;m128def.dat&amp;quot;&lt;br /&gt;
'Const Loaderchip = 128&lt;br /&gt;
 &lt;br /&gt;
'$regfile = &amp;quot;m64def.dat&amp;quot;&lt;br /&gt;
'Const Loaderchip = 64&lt;br /&gt;
 &lt;br /&gt;
'$regfile = &amp;quot;m2561def.dat&amp;quot;&lt;br /&gt;
'Const Loaderchip = 2561&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
'$regfile = &amp;quot;m2560def.dat&amp;quot;&lt;br /&gt;
'Const Loaderchip = 2560&lt;br /&gt;
 &lt;br /&gt;
'$regfile = &amp;quot;m329def.dat&amp;quot;&lt;br /&gt;
'Const Loaderchip = 329&lt;br /&gt;
 &lt;br /&gt;
'$regfile = &amp;quot;m324pdef.dat&amp;quot;&lt;br /&gt;
'Const Loaderchip = 324&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
$regfile = &amp;quot;m644def.dat&amp;quot;&lt;br /&gt;
'$regfile = &amp;quot;m644Pdef.dat&amp;quot;&lt;br /&gt;
Const Loaderchip = 644&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
#if Loaderchip = 88 'Mega88&lt;br /&gt;
 $loader = $c00 'this address you can find in the datasheet&lt;br /&gt;
 'the loader address is the same as the boot vector address&lt;br /&gt;
 Const Maxwordbit = 5&lt;br /&gt;
 Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0&lt;br /&gt;
#endif&lt;br /&gt;
 &lt;br /&gt;
#if Loaderchip = 168 'Mega168&lt;br /&gt;
 $loader = $1c00 'this address you can find in the datasheet&lt;br /&gt;
 'the loader address is the same as the boot vector address&lt;br /&gt;
 Const Maxwordbit = 6&lt;br /&gt;
 Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0&lt;br /&gt;
#endif&lt;br /&gt;
 &lt;br /&gt;
#if Loaderchip = 32 ' Mega32&lt;br /&gt;
 $loader = $3c00 ' 1024 words&lt;br /&gt;
 Const Maxwordbit = 6 'Z6 is maximum bit '&lt;br /&gt;
 Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0&lt;br /&gt;
#endif&lt;br /&gt;
#if Loaderchip = 8 ' Mega8&lt;br /&gt;
 $loader = $c00 ' 1024 words&lt;br /&gt;
 Const Maxwordbit = 5 'Z5 is maximum bit '&lt;br /&gt;
 Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0&lt;br /&gt;
#endif&lt;br /&gt;
#if Loaderchip = 161 ' Mega161&lt;br /&gt;
 $loader = $1e00 ' 1024 words&lt;br /&gt;
 Const Maxwordbit = 6 'Z6 is maximum bit '&lt;br /&gt;
#endif&lt;br /&gt;
#if Loaderchip = 162 ' Mega162&lt;br /&gt;
 $loader = $1c00 ' 1024 words&lt;br /&gt;
 Const Maxwordbit = 6 'Z6 is maximum bit '&lt;br /&gt;
 Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0&lt;br /&gt;
#endif&lt;br /&gt;
 &lt;br /&gt;
#if Loaderchip = 8515 ' Mega8515&lt;br /&gt;
 $loader = $c00 ' 1024 words&lt;br /&gt;
 Const Maxwordbit = 5 'Z6 is maximum bit '&lt;br /&gt;
 Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0&lt;br /&gt;
 Osccal = &amp;amp;HB3 ' the internal osc needed a new value&lt;br /&gt;
#endif&lt;br /&gt;
 &lt;br /&gt;
#if Loaderchip = 64 ' Mega64&lt;br /&gt;
 $loader = $7c00 ' 1024 words&lt;br /&gt;
 Const Maxwordbit = 7 'Z7 is maximum bit '&lt;br /&gt;
 Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0&lt;br /&gt;
#endif&lt;br /&gt;
 &lt;br /&gt;
#if Loaderchip = 128 ' Mega128&lt;br /&gt;
 $loader = &amp;amp;HFC00 ' 1024 words&lt;br /&gt;
 Const Maxwordbit = 7 'Z7 is maximum bit '&lt;br /&gt;
 Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0&lt;br /&gt;
#endif&lt;br /&gt;
 &lt;br /&gt;
#if Loaderchip = 2561 ' Mega2561&lt;br /&gt;
 $loader = &amp;amp;H1FC00 ' 1024 words&lt;br /&gt;
 Const Maxwordbit = 7 'Z7 is maximum bit '&lt;br /&gt;
 Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0&lt;br /&gt;
#endif&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
#if Loaderchip = 2560 ' Mega2560&lt;br /&gt;
 $loader = &amp;amp;H1FC00 ' 1024 words&lt;br /&gt;
 Const Maxwordbit = 7 'Z7 is maximum bit '&lt;br /&gt;
 Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0&lt;br /&gt;
#endif&lt;br /&gt;
 &lt;br /&gt;
#if Loaderchip = 16 ' Mega16&lt;br /&gt;
 $loader = $1c00 ' 1024 words&lt;br /&gt;
 Const Maxwordbit = 6 'Z6 is maximum bit '&lt;br /&gt;
 Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0&lt;br /&gt;
#endif&lt;br /&gt;
 &lt;br /&gt;
#if Loaderchip = 329 ' Mega32&lt;br /&gt;
 $loader = $3c00 ' 1024 words&lt;br /&gt;
 Const Maxwordbit = 6 'Z6 is maximum bit '&lt;br /&gt;
 Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0&lt;br /&gt;
#endif&lt;br /&gt;
 &lt;br /&gt;
#if Loaderchip = 324 ' Mega32&lt;br /&gt;
 $loader = $3c00 ' 1024 words&lt;br /&gt;
 Const Maxwordbit = 6 'Z6 is maximum bit '&lt;br /&gt;
 Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0&lt;br /&gt;
#endif&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
#if Loaderchip = 644 ' Mega644P&lt;br /&gt;
 $loader = $7c00 ' 1024 words&lt;br /&gt;
 Const Maxwordbit = 7 'Z7 is maximum bit '&lt;br /&gt;
 Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0&lt;br /&gt;
#endif&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Const Maxword =(2 ^ Maxwordbit) * 2 '128&lt;br /&gt;
Const Maxwordshift = Maxwordbit + 1&lt;br /&gt;
Const Cdebug = 0 ' leave this to 0&lt;br /&gt;
 &lt;br /&gt;
#if Cdebug&lt;br /&gt;
 Print Maxword&lt;br /&gt;
 Print Maxwordshift&lt;br /&gt;
#endif&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
'Dim the used variables&lt;br /&gt;
Dim Bstatus As Byte , Bretries As Byte , Bblock As Byte , Bblocklocal As Byte&lt;br /&gt;
Dim Bcsum1 As Byte , Bcsum2 As Byte , Buf(128) As Byte , Csum As Byte&lt;br /&gt;
Dim J As Byte , Spmcrval As Byte ' self program command byte value&lt;br /&gt;
 &lt;br /&gt;
Dim Z As Long 'this is the Z pointer word&lt;br /&gt;
Dim Vl As Byte , Vh As Byte ' these bytes are used for the data values&lt;br /&gt;
Dim Wrd As Word , Page As Word 'these vars contain the page and word address&lt;br /&gt;
Dim Bkind As Byte , Bstarted As Byte&lt;br /&gt;
'Mega 88 : 32 words, 128 pages&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Disable Interrupts 'we do not use ints&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
'Waitms 100 'wait 100 msec sec&lt;br /&gt;
'We start with receiving a file. The PC must send this binary file&lt;br /&gt;
 &lt;br /&gt;
'some constants used in serial com&lt;br /&gt;
Const Nak = &amp;amp;H15&lt;br /&gt;
Const Ack = &amp;amp;H06&lt;br /&gt;
Const Can = &amp;amp;H18&lt;br /&gt;
 &lt;br /&gt;
'we use some leds as indication in this sample , you might want to remove it&lt;br /&gt;
Config Pinb.2 = Output&lt;br /&gt;
Portb.2 = 1 'the stk200 has inverted logic for the leds&lt;br /&gt;
Config Pinb.3 = Output&lt;br /&gt;
Portb.3 = 1&lt;br /&gt;
 &lt;br /&gt;
$timeout = 400000 'we use a timeout&lt;br /&gt;
'When you get LOADER errors during the upload, increase the timeout value&lt;br /&gt;
'for example at 16 Mhz, use 200000&lt;br /&gt;
 &lt;br /&gt;
Bretries = 5 'we try 5 times&lt;br /&gt;
Testfor123:&lt;br /&gt;
#if Cdebug&lt;br /&gt;
 Print &amp;quot;Try &amp;quot; ; Bretries&lt;br /&gt;
 Print &amp;quot;Wait&amp;quot;&lt;br /&gt;
#endif&lt;br /&gt;
Bstatus = Waitkey() 'wait for the loader to send a byte&lt;br /&gt;
#if Cdebug&lt;br /&gt;
 Print &amp;quot;Got &amp;quot;&lt;br /&gt;
#endif&lt;br /&gt;
 &lt;br /&gt;
Print Chr(bstatus);&lt;br /&gt;
 &lt;br /&gt;
If Bstatus = 123 Then 'did we received value 123 ?&lt;br /&gt;
 Bkind = 0 'normal flash loader&lt;br /&gt;
 Goto Loader&lt;br /&gt;
Elseif Bstatus = 124 Then ' EEPROM&lt;br /&gt;
 Bkind = 1 ' EEPROM loader&lt;br /&gt;
 Goto Loader&lt;br /&gt;
Elseif Bstatus &amp;lt;&amp;gt; 0 Then&lt;br /&gt;
 Decr Bretries&lt;br /&gt;
 If Bretries &amp;lt;&amp;gt; 0 Then Goto Testfor123 'we test again&lt;br /&gt;
End If&lt;br /&gt;
 &lt;br /&gt;
For J = 1 To 10 'this is a simple indication that we start the normal reset vector&lt;br /&gt;
 Toggle Portb.2 : Waitms 100&lt;br /&gt;
Next&lt;br /&gt;
 &lt;br /&gt;
#if Cdebug&lt;br /&gt;
Print &amp;quot;RESET&amp;quot;&lt;br /&gt;
#endif&lt;br /&gt;
Goto _reset 'goto the normal reset vector at address 0&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
'this is the loader routine. It is a Xmodem-checksum reception routine&lt;br /&gt;
Loader:&lt;br /&gt;
#if Cdebug&lt;br /&gt;
 Print &amp;quot;Clear buffer&amp;quot;&lt;br /&gt;
#endif&lt;br /&gt;
Do&lt;br /&gt;
 Bstatus = Waitkey()&lt;br /&gt;
Loop Until Bstatus = 0&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
For J = 1 To 3 'this is a simple indication that we start the normal reset vector&lt;br /&gt;
 Toggle Portb.2 : Waitms 50&lt;br /&gt;
Next&lt;br /&gt;
 &lt;br /&gt;
If Bkind = 0 Then&lt;br /&gt;
 Spmcrval = 3 : Gosub Do_spm ' erase the first page&lt;br /&gt;
 Spmcrval = 17 : Gosub Do_spm ' re-enable page&lt;br /&gt;
End If&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Bretries = 10 'number of retries&lt;br /&gt;
 &lt;br /&gt;
Do&lt;br /&gt;
 Bstarted = 0 ' we were not started yet&lt;br /&gt;
 Csum = 0 'checksum is 0 when we start&lt;br /&gt;
Print Chr(nak); ' firt time send a nack&lt;br /&gt;
Do&lt;br /&gt;
 &lt;br /&gt;
 Bstatus = Waitkey() 'wait for statuse byte&lt;br /&gt;
 &lt;br /&gt;
 Select Case Bstatus&lt;br /&gt;
 Case 1: ' start of heading, PC is ready to send&lt;br /&gt;
 Incr Bblocklocal 'increase local block count&lt;br /&gt;
 Csum = 1 'checksum is 1&lt;br /&gt;
 Bblock = Waitkey() : Csum = Csum + Bblock 'get block&lt;br /&gt;
 Bcsum1 = Waitkey() : Csum = Csum + Bcsum1 'get checksum first byte&lt;br /&gt;
 For J = 1 To 128 'get 128 bytes&lt;br /&gt;
 Buf(j) = Waitkey() : Csum = Csum + Buf(j)&lt;br /&gt;
 Next&lt;br /&gt;
 Bcsum2 = Waitkey() 'get second checksum byte&lt;br /&gt;
 If Bblocklocal = Bblock Then 'are the blocks the same?&lt;br /&gt;
 If Bcsum2 = Csum Then 'is the checksum the same?&lt;br /&gt;
 Gosub Writepage 'yes go write the page&lt;br /&gt;
 Print Chr(ack); 'acknowledge&lt;br /&gt;
 Else 'no match so send nak&lt;br /&gt;
 Print Chr(nak);&lt;br /&gt;
 End If&lt;br /&gt;
 Else&lt;br /&gt;
 Print Chr(nak); 'blocks do not match&lt;br /&gt;
 End If&lt;br /&gt;
 Case 4: ' end of transmission , file is transmitted&lt;br /&gt;
 If Wrd &amp;gt; 0 And Bkind = 0 Then 'if there was something left in the page&lt;br /&gt;
 Wrd = 0 'Z pointer needs wrd to be 0&lt;br /&gt;
 Spmcrval = 5 : Gosub Do_spm 'write page&lt;br /&gt;
 Spmcrval = 17 : Gosub Do_spm ' re-enable page&lt;br /&gt;
 End If&lt;br /&gt;
 ' Waitms 100 ' OPTIONAL REMARK THIS IF THE DTR SIGNAL ARRIVES TO EARLY&lt;br /&gt;
 Print Chr(ack); ' send ack and ready&lt;br /&gt;
 &lt;br /&gt;
 Portb.3 = 0 ' simple indication that we are finished and ok&lt;br /&gt;
 Waitms 20&lt;br /&gt;
 Goto _reset ' start new program&lt;br /&gt;
 Case &amp;amp;H18: ' PC aborts transmission&lt;br /&gt;
 Goto _reset ' ready&lt;br /&gt;
 Case 123 : Exit Do 'was probably still in the buffer&lt;br /&gt;
 Case 124 : Exit Do&lt;br /&gt;
 Case Else&lt;br /&gt;
 Exit Do ' no valid data&lt;br /&gt;
 End Select&lt;br /&gt;
Loop&lt;br /&gt;
If Bretries &amp;gt; 0 Then 'attempte left?&lt;br /&gt;
 Waitms 1000&lt;br /&gt;
 Decr Bretries 'decrease attempts&lt;br /&gt;
Else&lt;br /&gt;
 Goto _reset 'reset chip&lt;br /&gt;
End If&lt;br /&gt;
Loop&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
'write one or more pages&lt;br /&gt;
Writepage:&lt;br /&gt;
If Bkind = 0 Then&lt;br /&gt;
 For J = 1 To 128 Step 2 'we write 2 bytes into a page&lt;br /&gt;
 Vl = Buf(j) : Vh = Buf(j + 1) 'get Low and High bytes&lt;br /&gt;
 lds r0, {vl} 'store them into r0 and r1 registers&lt;br /&gt;
 lds r1, {vh}&lt;br /&gt;
 Spmcrval = 1 : Gosub Do_spm 'write value into page at word address&lt;br /&gt;
 Wrd = Wrd + 2 ' word address increases with 2 because LS bit of Z is not used&lt;br /&gt;
 If Wrd = Maxword Then ' page is full&lt;br /&gt;
 Wrd = 0 'Z pointer needs wrd to be 0&lt;br /&gt;
 Spmcrval = 5 : Gosub Do_spm 'write page&lt;br /&gt;
 Spmcrval = 17 : Gosub Do_spm ' re-enable page&lt;br /&gt;
 &lt;br /&gt;
 Page = Page + 1 'next page&lt;br /&gt;
 Spmcrval = 3 : Gosub Do_spm ' erase next page&lt;br /&gt;
 Spmcrval = 17 : Gosub Do_spm ' re-enable page&lt;br /&gt;
 End If&lt;br /&gt;
 Next&lt;br /&gt;
 &lt;br /&gt;
Else 'eeprom&lt;br /&gt;
 For J = 1 To 128&lt;br /&gt;
 Writeeeprom Buf(j) , Wrd&lt;br /&gt;
 Wrd = Wrd + 1&lt;br /&gt;
 Next&lt;br /&gt;
End If&lt;br /&gt;
Toggle Portb.2 : Waitms 10 : Toggle Portb.2 'indication that we write&lt;br /&gt;
Return&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Do_spm:&lt;br /&gt;
Bitwait Spmcsr.0 , Reset ' check for previous SPM complete&lt;br /&gt;
Bitwait Eecr.1 , Reset 'wait for eeprom&lt;br /&gt;
 &lt;br /&gt;
 Z = Page 'make equal to page&lt;br /&gt;
Shift Z , Left , Maxwordshift 'shift to proper place&lt;br /&gt;
 Z = Z + Wrd 'add word&lt;br /&gt;
lds r30,{Z}&lt;br /&gt;
lds r31,{Z+1}&lt;br /&gt;
 &lt;br /&gt;
#if _romsize &amp;gt; 65536&lt;br /&gt;
 lds r24,{Z+2}&lt;br /&gt;
 sts rampz,r24 ' we need to set rampz also for the M128&lt;br /&gt;
#endif&lt;br /&gt;
 &lt;br /&gt;
Spmcsr = Spmcrval 'assign register&lt;br /&gt;
spm 'this is an asm instruction&lt;br /&gt;
nop&lt;br /&gt;
nop&lt;br /&gt;
Return&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
'How you need to use this program:&lt;br /&gt;
'1- compile this program&lt;br /&gt;
'2- program into chip with sample elctronics programmer&lt;br /&gt;
'3- select MCS Bootloader from programmers&lt;br /&gt;
'4- compile a new program for example M88.bas&lt;br /&gt;
'5- press F4 and reset your micro&lt;br /&gt;
' the program will now be uploaded into the chip with Xmodem Checksum&lt;br /&gt;
' you can write your own loader.too&lt;br /&gt;
'A stand alone command line loader is also available&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
'How to call the bootloader from your program without a reset ???&lt;br /&gt;
'Do&lt;br /&gt;
' Print &amp;quot;test&amp;quot;&lt;br /&gt;
' Waitms 1000&lt;br /&gt;
' If Inkey() = 27 Then&lt;br /&gt;
' Print &amp;quot;boot&amp;quot;&lt;br /&gt;
' Goto &amp;amp;H1C00&lt;br /&gt;
' End If&lt;br /&gt;
'Loop&lt;br /&gt;
 &lt;br /&gt;
'The GOTO will do the work, you need to specify the correct bootloader address&lt;br /&gt;
'this is the same as the $LOADER statement.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;font-size: 19px; font-weight: bold;&amp;quot;&amp;gt;ATXMEGA Example:&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bascomavr&amp;quot;&amp;gt;&lt;br /&gt;
'----------------------------------------------------------------&lt;br /&gt;
' (c) 1995-2009, MCS&lt;br /&gt;
' BootloaderXmega32A4.bas&lt;br /&gt;
' This sample demonstrates how you can write your own bootloader&lt;br /&gt;
' in BASCOM BASIC for the XMEGA&lt;br /&gt;
'-----------------------------------------------------------------&lt;br /&gt;
'The loader is supported from the IDE&lt;br /&gt;
$crystal = 32000000 ' xmega128 is running on 32 MHz&lt;br /&gt;
$regfile = &amp;quot;xm32a4def.dat&amp;quot;&lt;br /&gt;
$lib &amp;quot;xmega.lib&amp;quot; ' add a reference to this lib&lt;br /&gt;
 &lt;br /&gt;
'first enabled the osc of your choice&lt;br /&gt;
Config Osc = Disabled , 32mhzosc = Enabled 'internal 2 MHz and 32 MHz enabled&lt;br /&gt;
 &lt;br /&gt;
'configure the systemclock&lt;br /&gt;
Config Sysclock = 32mhz , Prescalea = 1 , Prescalebc = 1_1 ' we will use 32 MHz and divide by 1 to end up with 32 MHz&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
$loader = &amp;amp;H4000 ' bootloader starts after the application&lt;br /&gt;
 &lt;br /&gt;
Config Com1 = 57600 , Mode = Asynchroneous , Parity = None , Stopbits = 1 , Databits = 8 ' use USART C0&lt;br /&gt;
'COM0-USARTC0, COM1-USARTC2, COM2-USARTD0. etc.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Config Portc.3 = Output 'define TX as output&lt;br /&gt;
Config Pinc.2 = Input&lt;br /&gt;
 &lt;br /&gt;
Const Maxwordbit = 7 ' Z7 is maximum bit '&lt;br /&gt;
Const Maxword =(2 ^ Maxwordbit) * 2 '128&lt;br /&gt;
Const Maxwordshift = Maxwordbit + 1&lt;br /&gt;
Const Cdebug = 0 ' leave this to 0&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
'Dim the used variables&lt;br /&gt;
Dim Bstatus As Byte , Bretries As Byte , Bmincount As Byte , Bblock As Byte , Bblocklocal As Byte&lt;br /&gt;
Dim Bcsum1 As Byte , Bcsum2 As Byte , Buf(128) As Byte , Csum As Byte&lt;br /&gt;
Dim J As Byte , Spmcrval As Byte ' self program command byte value&lt;br /&gt;
 &lt;br /&gt;
Dim Z As Long 'this is the Z pointer word&lt;br /&gt;
Dim Vl As Byte , Vh As Byte ' these bytes are used for the data values&lt;br /&gt;
Dim Wrd As Word , Page As Word 'these vars contain the page and word address&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Disable Interrupts 'we do not use ints&lt;br /&gt;
 &lt;br /&gt;
'We start with receiving a file. The PC must send this binary file&lt;br /&gt;
 &lt;br /&gt;
'some constants used in serial com&lt;br /&gt;
Const Nak = &amp;amp;H15&lt;br /&gt;
Const Ack = &amp;amp;H06&lt;br /&gt;
Const Can = &amp;amp;H18&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
$timeout = 300000 'we use a timeout&lt;br /&gt;
'When you get LOADER errors during the upload, increase the timeout value&lt;br /&gt;
'for example at 16 Mhz, use 200000&lt;br /&gt;
 &lt;br /&gt;
Bretries = 5 : Bmincount = 3 'we try 10 times and want to get 123 at least 3 times&lt;br /&gt;
Do&lt;br /&gt;
 Bstatus = Waitkey() 'wait for the loader to send a byte&lt;br /&gt;
 &lt;br /&gt;
If Bstatus = 123 Then 'did we received value 123 ?&lt;br /&gt;
 If Bmincount &amp;gt; 0 Then&lt;br /&gt;
 Decr Bmincount&lt;br /&gt;
 Else&lt;br /&gt;
 Print Chr(bstatus);&lt;br /&gt;
 Goto Loader ' yes so run bootloader&lt;br /&gt;
 End If&lt;br /&gt;
Else 'we received some other data&lt;br /&gt;
 If Bretries &amp;gt; 0 Then 'retries left?&lt;br /&gt;
 Bmincount = 3&lt;br /&gt;
 Decr Bretries&lt;br /&gt;
 Else&lt;br /&gt;
 Rampz = 0&lt;br /&gt;
 Goto Proces_reset 'goto the normal reset vector at address 0&lt;br /&gt;
 End If&lt;br /&gt;
End If&lt;br /&gt;
Loop&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
'this is the loader routine. It is a Xmodem-checksum reception routine&lt;br /&gt;
Loader:&lt;br /&gt;
Do&lt;br /&gt;
 Bstatus = Waitkey()&lt;br /&gt;
Loop Until Bstatus = 0&lt;br /&gt;
 &lt;br /&gt;
 Spmcrval = &amp;amp;H20 : Gosub Do_spm ' erase all app pages&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Bretries = 10 'number of retries&lt;br /&gt;
 &lt;br /&gt;
Do&lt;br /&gt;
 Csum = 0 'checksum is 0 when we start&lt;br /&gt;
Print Chr(nak); ' firt time send a nack&lt;br /&gt;
Do&lt;br /&gt;
 &lt;br /&gt;
 Bstatus = Waitkey() 'wait for statuse byte&lt;br /&gt;
 &lt;br /&gt;
 Select Case Bstatus&lt;br /&gt;
 Case 1: ' start of heading, PC is ready to send&lt;br /&gt;
 Incr Bblocklocal 'increase local block count&lt;br /&gt;
 Csum = 1 'checksum is 1&lt;br /&gt;
 Bblock = Waitkey() : Csum = Csum + Bblock 'get block&lt;br /&gt;
 Bcsum1 = Waitkey() : Csum = Csum + Bcsum1 'get checksum first byte&lt;br /&gt;
 For J = 1 To 128 'get 128 bytes&lt;br /&gt;
 Buf(j) = Waitkey() : Csum = Csum + Buf(j)&lt;br /&gt;
 Next&lt;br /&gt;
 Bcsum2 = Waitkey() 'get second checksum byte&lt;br /&gt;
 &lt;br /&gt;
 If Bblocklocal = Bblock Then 'are the blocks the same?&lt;br /&gt;
 &lt;br /&gt;
 If Bcsum2 = Csum Then 'is the checksum the same?&lt;br /&gt;
 Gosub Writepage 'yes go write the page&lt;br /&gt;
 Print Chr(ack); 'acknowledge&lt;br /&gt;
 Else 'no match so send nak&lt;br /&gt;
 Print Chr(nak);&lt;br /&gt;
 End If&lt;br /&gt;
 Else&lt;br /&gt;
 Print Chr(nak); 'blocks do not match&lt;br /&gt;
 End If&lt;br /&gt;
 Case 4: ' end of transmission , file is transmitted&lt;br /&gt;
 If Wrd &amp;gt; 0 Then 'if there was something left in the page&lt;br /&gt;
 Wrd = 0 'Z pointer needs wrd to be 0&lt;br /&gt;
 Spmcrval = &amp;amp;H24 : Gosub Do_spm 'write page&lt;br /&gt;
 End If&lt;br /&gt;
 Print Chr(ack); ' send ack and ready&lt;br /&gt;
 Waitms 20&lt;br /&gt;
 Goto Proces_reset&lt;br /&gt;
 Case &amp;amp;H18: ' PC aborts transmission&lt;br /&gt;
 Goto Proces_reset ' ready&lt;br /&gt;
 Case 123 : Exit Do 'was probably still in the buffer&lt;br /&gt;
 Case 124 : Exit Do&lt;br /&gt;
 Case Else&lt;br /&gt;
 Exit Do ' no valid data&lt;br /&gt;
 End Select&lt;br /&gt;
Loop&lt;br /&gt;
If Bretries &amp;gt; 0 Then 'attempte left?&lt;br /&gt;
 Waitms 1000&lt;br /&gt;
 Decr Bretries 'decrease attempts&lt;br /&gt;
Else&lt;br /&gt;
 Goto Proces_reset 'reset chip&lt;br /&gt;
End If&lt;br /&gt;
Loop&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
'write one or more pages&lt;br /&gt;
Writepage:&lt;br /&gt;
 For J = 1 To 128 Step 2 'we write 2 bytes into a page&lt;br /&gt;
 Vl = Buf(j) : Vh = Buf(j + 1) 'get Low and High bytes&lt;br /&gt;
 lds r0, {vl} 'store them into r0 and r1 registers&lt;br /&gt;
 lds r1, {vh}&lt;br /&gt;
 Spmcrval = &amp;amp;H23 : Gosub Do_spm 'write value into page at word address&lt;br /&gt;
 Wrd = Wrd + 2 ' word address increases with 2 because LS bit of Z is not used&lt;br /&gt;
 If Wrd = Maxword Then ' page is full&lt;br /&gt;
 Wrd = 0 'Z pointer needs wrd to be 0&lt;br /&gt;
 Spmcrval = &amp;amp;H24 : Gosub Do_spm 'write page&lt;br /&gt;
 Page = Page + 1 'next page&lt;br /&gt;
 End If&lt;br /&gt;
 Next&lt;br /&gt;
Return&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Do_spm:&lt;br /&gt;
 Z = Page 'make equal to page&lt;br /&gt;
Shift Z , Left , Maxwordshift 'shift to proper place&lt;br /&gt;
 Z = Z + Wrd 'add word&lt;br /&gt;
lds r30,{Z}&lt;br /&gt;
lds r31,{Z+1}&lt;br /&gt;
 &lt;br /&gt;
#if _romsize &amp;gt; 65536&lt;br /&gt;
 lds r24,{Z+2}&lt;br /&gt;
 sts rampz,r24 ' we need to set rampz also for the M128&lt;br /&gt;
#endif&lt;br /&gt;
 &lt;br /&gt;
Nvm_cmd = Spmcrval&lt;br /&gt;
Cpu_ccp = &amp;amp;H9D&lt;br /&gt;
spm 'this is an asm instruction&lt;br /&gt;
Do_spm_busy:&lt;br /&gt;
 lds r23, NVM_STATUS&lt;br /&gt;
 sbrc r23,7 ;if busy bit is cleared skip next instruc tion&lt;br /&gt;
 rjmp do_spm_busy&lt;br /&gt;
Return&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Proces_reset:&lt;br /&gt;
Rampz = 0&lt;br /&gt;
Goto _reset 'start at address 0&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;br/&amp;gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
[[Category:BASCOM_Language_Reference/de]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>