<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=12&amp;t=20640&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-04-25T11:27:39+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=12&amp;t=20640&amp;mode</id>
<entry>
<author><name><![CDATA[mes mariusz]]></name></author>
<updated>2018-04-25T11:27:39+01:00</updated>
<published>2018-04-25T11:27:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20640&amp;p=207137#p207137</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20640&amp;p=207137#p207137"/>
<title type="html"><![CDATA[Re: Selfprograming / bootloader - programuje pierwsze 17 str]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20640&amp;p=207137#p207137"><![CDATA[
Dobra, Panowie (i Panie?). <br /><br />Nie wiem czemu wcześniej nie działało (może za szybko odczytywałem zawartość flash z uC, zanim zakończył się selfprograming) w każdym razie teraz już wszystko działa elegancko, czyli wszystkie strony począwszy od strony 0 do strony 247 (czyli pierwsze 248 stron) zapisuje się wartością numeru strony, a na stronie kolejnej zaczyna się kod bootloadera.<br /><br />Jest cacy!<br /><br /><a href="https://obrazkiforum.atnel.pl/7975/437ca7cc829e2bbbf526a331bd6a687e.gif"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/7975/437ca7cc829e2bbbf526a331bd6a687e.gif" alt="Obrazek" /></a><br /><br />[syntax=basic4gl]$crystal = 8000000<br /><br />$regfile = &quot;m644pdef.dat&quot;<br />$loader = $7c00<br /><br />Dim Licznik As Byte<br />Dim Strona As Byte<br />Dim Slowo As Byte<br /><br />For Strona = 0 To 247<br /><br /> '### Kasowanie Strony ###<br /> LDS r31,{strona}<br /> Spmcsr = 3<br /> SPM<br /> Waitms 5<br /><br /> '### zapis bufora strony ###<br /> For Licznik = 0 To 127<br />  Slowo = Licznik<br />  Shift Slowo , Left , 1<br />  LDS r0,{strona}<br />  LDS r1,{strona}<br />  LDS r30,{slowo}<br />  LDS r31,{strona}<br />  Spmcsr = 1<br />  SPM<br />  Waitms 5<br /> Next Licznik<br /><br /> Reset Portb.1<br /><br /> '### zapis bufora strony do pamięci flash<br /> LDS r30,0<br /> Spmcsr = 5<br /> SPM<br /> Waitms 5<br /><br />Next Strona<br /><br />'### ponownie załącz możliwość odczytu sekcji RWW ###<br />Spmcsr = 17<br />SPM<br />NOP<br />Waitms 5<br /><br />End[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7975">mes mariusz</a> — 25 kwi 2018, o 11:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mes mariusz]]></name></author>
<updated>2018-04-24T12:07:17+01:00</updated>
<published>2018-04-24T10:50:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20640&amp;p=207096#p207096</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20640&amp;p=207096#p207096"/>
<title type="html"><![CDATA[Selfprograming / bootloader - programuje pierwsze 17 stron]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20640&amp;p=207096#p207096"><![CDATA[
Witam. <br /><br />Ćwiczę sobie podstawy boodloadera (selfprograming) na mikrokontrolerze ATmega644P.<br /><br />Dla jasności:<br /><br />ATmega644P to:<br /><br />256 stron pamięci po 128 dwu bajtowych słów maszynowych na każdej (czyli 64KB flash).<br />R0 - składowanie pierwszej połówki słowa maszynowego<br />R1 - składowanie drugiej połówki słowa maszynowego<br />R30 - składowanie numeru słowa na stronie (pamiętamy o przesunięciu o jedną pozycję w lewo)<br />R31 - składowanie numeru strony<br /><br />Popełniłem sobie taki kod:<br /><br />[syntax=basic4gl]$crystal = 8000000<br /><br />$regfile = &quot;m644pdef.dat&quot;<br />$loader = $7c00<br /><br />Dim Licznik As Byte<br />Dim Strona As Byte<br />Dim Slowo As Byte<br /><br />Config Portb.1 = Output<br />Config Pinb.0 = Input<br />Set Portb.0<br /><br />Do<br /> Reset Portb.1<br /> Waitms 500<br /> Set Portb.1<br /> Waitms 500<br /> If Pinb.0 = 0 Then Exit Do<br />Loop<br /><br />Reset Portb.1<br />Bitwait Pinb.0 , Set<br />Bitwait Pinb.0 , Reset<br />Set Portb.1<br /><br />For Strona = 0 To 255<br /><br /> '### Kasowanie Strony ###<br /> LDS r31,{strona}<br /> Spmcsr = 3<br /> SPM<br /> Waitms 5<br /><br /> '### zapis bufora strony ###<br /> For Licznik = 0 To 127<br />  Slowo = Licznik<br />  Shift Slowo , Left , 1<br />  LDS r0,{strona}<br />  LDS r1,{strona}<br />  LDS r30,{slowo}<br />  LDS r31,{strona}<br />  Spmcsr = 1<br />  SPM<br />  Waitms 5<br /> Next Licznik<br /><br /> Reset Portb.1<br /><br /> '### zapis bufora strony do pamięci flash<br /> LDS r30,0<br /> Spmcsr = 5<br /> SPM<br /> Waitms 5<br /><br />Next Strona<br /><br />'### ponownie załącz możliwość odczytu sekcji RWW ###<br />Spmcsr = 17<br />SPM<br />NOP<br />Waitms 5[/syntax]<br /><br />Zasada działania jest prosta:<br /><br />1. Migaj sobie diodą na porcie B1<br />2. Jeśli na pinie B0 pojawi się stan niski olej diodę i zaprogramuj komórki pamięci flash numerem strony, na której leży dana komórka. <br /><br />Prawie działa. <br /><br />Po zainicjowaniu selfprogramingu (podanie na B0 na chwilę stanu &quot;0&quot;, potem znów &quot;1&quot;) sczytuję pamięć flash, i co widzę?<br /><br />Początek jest niezły. Widać, że kolejne strony zostają zapisywane kolejnymi numerami stron (począwszy od wartości 0).<br /><br />Poniżej widzimy dwie strony i kawałek trzeciej:<br /><br /><a href="https://obrazkiforum.atnel.pl/7975/d0f2dc9a9260fb21a2cd9d18743067b6.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/7975/d0f2dc9a9260fb21a2cd9d18743067b6.png" alt="Obrazek" /></a><br /><br />Z jakiegoś powodu zapisuje się 17 stron, a później widać niezaprogramowane komórki (255 dec, czyli FF hex):<br /><br /><a href="https://obrazkiforum.atnel.pl/7975/4d727e9b8564155b7652ef9db914eb40.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/7975/4d727e9b8564155b7652ef9db914eb40.png" alt="Obrazek" /></a><br /><br />Gdzieś musi być bug, którego nie potrafię wyłapać. <br /><br />Pomogą?<br /><br /><img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7975">mes mariusz</a> — 24 kwi 2018, o 10:50</p><hr />
]]></content>
</entry>
</feed>