<?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=8&amp;t=23788&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2021-06-19T16:08:21+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=23788&amp;mode</id>
<entry>
<author><name><![CDATA[gordon10]]></name></author>
<updated>2021-06-19T16:08:21+01:00</updated>
<published>2021-06-19T16:08:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232763#p232763</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232763#p232763"/>
<title type="html"><![CDATA[Re: Sygnatura produkcyjna i Lockbity w XMega - rozważania...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232763#p232763"><![CDATA[
No i śmiga jak ta lala <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Sprawdziłem na Xmega32A4U. Dzięki andrews.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=968">gordon10</a> — 19 cze 2021, o 16:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2021-06-19T14:54:25+01:00</updated>
<published>2021-06-19T14:54:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232761#p232761</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232761#p232761"/>
<title type="html"><![CDATA[Re: Sygnatura produkcyjna i Lockbity w XMega - rozważania...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232761#p232761"><![CDATA[
Możesz spróbować tak:[syntax=c]#define get_prod_sig_offset(m)      (uint8_t)offsetof(NVM_PROD_SIGNATURES_t, m)<br /><br />//przykładowe odczytanie<br />    uint8_t prod_number&#91;11&#93;;<br /><br />    prod_number&#91;0&#93; = nvm_read_calibration_byte(get_prod_sig_offset(LOTNUM0));<br />    prod_number&#91;1&#93; = nvm_read_calibration_byte(get_prod_sig_offset(LOTNUM1));<br />    prod_number&#91;2&#93; = nvm_read_calibration_byte(get_prod_sig_offset(LOTNUM2));<br />    prod_number&#91;3&#93; = nvm_read_calibration_byte(get_prod_sig_offset(LOTNUM3));<br />    prod_number&#91;4&#93; = nvm_read_calibration_byte(get_prod_sig_offset(LOTNUM4));<br />    prod_number&#91;5&#93; = nvm_read_calibration_byte(get_prod_sig_offset(LOTNUM5));<br />    prod_number&#91;6&#93; = nvm_read_calibration_byte(get_prod_sig_offset(WAFNUM));<br />    prod_number&#91;7&#93; = nvm_read_calibration_byte(get_prod_sig_offset(COORDX0));<br />    prod_number&#91;8&#93; = nvm_read_calibration_byte(get_prod_sig_offset(COORDX1));<br />    prod_number&#91;9&#93; = nvm_read_calibration_byte(get_prod_sig_offset(COORDY0));<br />    prod_number&#91;10&#93; = nvm_read_calibration_byte(get_prod_sig_offset(COORDY1));<br /><br />// funkcja<br />uint8_t nvm_read_calibration_byte(uint8_t addr)<br />{<br />    uint8_t __res;<br />    <br />    ATOMIC_BLOCK(ATOMIC_RESTORESTATE)<br />    {<br />        __res = NVM_CMD_READ_CALIB_ROW_gc;<br />        <br />        asm volatile(<br />        &quot;sts %2, %0&quot;                    &quot;\n\t&quot;<br />        &quot;lpm %0, %a1&quot;                   &quot;\n\t&quot;<br />        : &quot;+r&quot; (__res)<br />        : &quot;z&quot;  (addr),<br />          &quot;i&quot;  (&amp;NVM_CMD)<br />        );<br />    }<br />    NVM.CMD = NVM_CMD_NO_OPERATION_gc;<br />    return __res;<br />}[/syntax]<br />Powinno zadziałać (sprawdzone na ATxmega128A3U).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 19 cze 2021, o 14:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gordon10]]></name></author>
<updated>2021-06-17T22:00:43+01:00</updated>
<published>2021-06-17T22:00:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232753#p232753</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232753#p232753"/>
<title type="html"><![CDATA[Re: Sygnatura produkcyjna i Lockbity w XMega - rozważania...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232753#p232753"><![CDATA[
Pogrzebałem jeszcze w pikach ASF w AS z nadzieją, że znajdę gotowca i coś tam wyszperałem, no ale cóż, assemblera nie znam więc nie powalczę.<br /><br />Moje znaleziska:<br />w pliku nvm.h jest funkcja:<br />[syntax=c]static inline uint8_t nvm_read_production_signature_row(uint8_t address)<br />{<br />return nvm_read_byte(NVM_CMD_READ_CALIB_ROW_gc, address);<br />}[/syntax]<br /><br />a co do funkcji nvm_read_byte() znalazłem tylko coś takiego:<br />w pliku nvm_asm.s<br /><br />[syntax=asm]#ifndef __DOXYGEN__<br />PUBLIC_FUNCTION(nvm_read_byte)<br />#if defined(__GNUC__)<br />lds r20, NVM_CMD          ; Store NVM command register<br />mov ZL, r22               ; Load byte index into low byte of Z.<br />mov ZH, r23               ; Load high byte into Z.<br />sts NVM_CMD, r24          ; Load prepared command into NVM Command register.<br />lpm r24, Z                ; Perform an LPM to read out byte<br />sts NVM_CMD, r20          ; Restore NVM command register<br />#elif defined(__IAR_SYSTEMS_ASM__)<br />lds r20, NVM_CMD          ; Store NVM command register<br />mov ZL, r18               ; Load byte index into low byte of Z.<br />mov ZH, r19               ; Load high byte into Z.<br />sts NVM_CMD, r16          ; Load prepared command into NVM Command register.<br />lpm r16, Z                ; Perform an LPM to read out byte<br />sts NVM_CMD, r20          ; Restore NVM command register<br />#endif<br /><br />ret<br /><br />END_FUNC(nvm_read_byte)[/syntax]<br /><br />pozostaje tylko się podszkolić z asm <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=968">gordon10</a> — 17 cze 2021, o 22:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gordon10]]></name></author>
<updated>2021-06-17T20:22:17+01:00</updated>
<published>2021-06-17T20:22:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232752#p232752</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232752#p232752"/>
<title type="html"><![CDATA[Re: Sygnatura produkcyjna i Lockbity w XMega - rozważania...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232752#p232752"><![CDATA[
Sprawdzałem oczywiście niezakomentowaną. Tu mi się jakoś tak wkleiło <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />Sprawdzałem jako: asm... i asm volatile... też nic.<br />Podejrzewam trop jest dobry, tylko diabeł jak zwykle tkwi w szczegółach.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=968">gordon10</a> — 17 cze 2021, o 20:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fofex]]></name></author>
<updated>2021-06-17T19:39:59+01:00</updated>
<published>2021-06-17T19:39:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232751#p232751</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232751#p232751"/>
<title type="html"><![CDATA[Re: Sygnatura produkcyjna i Lockbity w XMega - rozważania...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232751#p232751"><![CDATA[
Wykomentowałeś instrukcję która robi robotę to jak ma działać?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21072">fofex</a> — 17 cze 2021, o 19:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gordon10]]></name></author>
<updated>2021-06-17T13:38:40+01:00</updated>
<published>2021-06-17T13:38:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232748#p232748</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232748#p232748"/>
<title type="html"><![CDATA[Re: Sygnatura produkcyjna i Lockbity w XMega - rozważania...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232748#p232748"><![CDATA[
Dzięki za sugestie i podpowiedzi. Poprawiłem literówki ale niestety nie działa. <br /><br />[syntax=c]uint8_t getProdSigByte(uint16_t addr) {<br />   uint8_t res;<br /><br />   ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {<br />      NVM.CMD = NVM_CMD_READ_CALIB_ROW_gc;<br />//      asm (&quot;lpm %0, Z&quot; : &quot;=w&quot; (res) : &quot;z&quot; (addr));<br />   }<br />   return res;<br />}[/syntax]<br /><br />Nie wiem czy adresu nie trzeba załadować wcześniej do rejestrów NVM.ADDR0 - NVM.ADDR2. No nic będę próbował dalej w wolnej chwili.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=968">gordon10</a> — 17 cze 2021, o 13:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fofex]]></name></author>
<updated>2021-06-13T19:47:14+01:00</updated>
<published>2021-06-13T19:47:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232706#p232706</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232706#p232706"/>
<title type="html"><![CDATA[Re: Sygnatura produkcyjna i Lockbity w XMega - rozważania...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232706#p232706"><![CDATA[
Wg manuala <!-- m --><a class="postlink" href="https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-8331-8-and-16-bit-AVR-Microcontroller-XMEGA-AU_Manual.pdf" >https://ww1.microchip.com/downloads/en/ ... Manual.pdf</a><!-- m --> str 416, punkt 33.11.2.14 trzeba się pobawić assemblerem.<br />Nie bardzo znam inline asm więc na pewno są błędy:<br />[syntax=c]uint8_t getProdSigByte(uint16_t addr)<br />{<br />   uint8_t res;<br /><br />   ATOMIC_BLOCK(RESTORE_STATE)<br />   {<br />      NVM.CMD = NVM_CMD_READ_CALIB_ROW_gc;<br />      asm(&quot;lpm %0, Z&quot; : &quot;=w&quot; (res) : &quot;z&quot; (addr);<br />   }<br />   return res;<br />}<br /><br /><br />...<br /><br />//odczytywanie kolejnych bajtów sygnatury produkcyjnej<br />i = 0;<br />sig&#91;i++&#93; = getProdSigByte(PRODSIGNATURES_LOTNUM0);<br />sig&#91;i++&#93; = getProdSigByte(PRODSIGNATURES_LOTNUM1);<br />sig&#91;i++&#93; = getProdSigByte(PRODSIGNATURES_LOTNUM2);<br />sig&#91;i++&#93; = getProdSigByte(PRODSIGNATURES_LOTNUM3);<br />sig&#91;i++&#93; = getProdSigByte(PRODSIGNATURES_LOTNUM4);<br />sig&#91;i++&#93; = getProdSigByte(PRODSIGNATURES_LOTNUM5);<br />sig&#91;i++&#93; = getProdSigByte(PRODSIGNATURES_WAFNUM);<br />sig&#91;i++&#93; = getProdSigByte(PRODSIGNATURES_COORDX0);<br />sig&#91;i++&#93; = getProdSigByte(PRODSIGNATURES_COORDX1);<br />sig&#91;i++&#93; = getProdSigByte(PRODSIGNATURES_COORDY0);<br />sig&#91;i++&#93; = getProdSigByte(PRODSIGNATURES_COORDY1);[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21072">fofex</a> — 13 cze 2021, o 19:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gordon10]]></name></author>
<updated>2021-06-13T10:20:49+01:00</updated>
<published>2021-06-13T10:20:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232703#p232703</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232703#p232703"/>
<title type="html"><![CDATA[Re: Sygnatura produkcyjna i Lockbity w XMega - rozważania...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232703#p232703"><![CDATA[
Grzebiąc dalej w necie i w pdf-ach stworzyłem 'szkic' funkcji odczytującej jeden bajt sygnatury xmega.<br /><br />[syntax=c]uint8_t prod_sign_read_byte( uint8_t addr)<br />{<br />while(NVM.STATUS &amp; NVM_NVMBUSY_bm);// czekaj na zakonczenie poprzedniej operacji<br /><br />// ustawianie adresu<br />NVM.ADDR0 = addr;<br />NVM.ADDR1 = 0x00;<br />NVM.ADDR2 = 0x00;<br /><br />NVM.CMD = NVM_CMD_READ_CALIB_ROW_gc;// komenda - odczytaj z sygnatury produkcyjnej<br /><br />NVM.CTRLA = NVM_CMDEX_bm;                // wykonaj polecenie<br /><br />//while(NVM.STATUS &amp; NVM_NVMBUSY_bm);// czekaj na zakonczenie operacji<br /><br />return NVM.DATA0;<br />}[/syntax]<br />Niestety nie działa. Nie wiem czy dobrze wpisuję/przekazuję adres.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=968">gordon10</a> — 13 cze 2021, o 10:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gordon10]]></name></author>
<updated>2021-06-11T15:54:52+01:00</updated>
<published>2021-06-11T15:54:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232692#p232692</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232692#p232692"/>
<title type="html"><![CDATA[Re: Sygnatura produkcyjna i Lockbity w XMega - rozważania...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232692#p232692"><![CDATA[
To już jest nas co najmniej dwóch <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Z mojej wiedzy w Atmel Studio są specjalne funkcje we frameworku ASF do odczytu tych informacji z Xmega. Tylko jak to zrobić w Eclipse (ja nie używam AS)???<br />W Xmega dostępem do pamięci zajmuje się kontroler NVM, za jego pomocą można się dobrać do danych z sygnatur produkcyjnej i użytkownika. Jednak teoria teorią, ale praktycznie tego nie rozkminiłem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=968">gordon10</a> — 11 cze 2021, o 15:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RadekB86]]></name></author>
<updated>2021-05-30T14:38:27+01:00</updated>
<published>2021-05-30T14:38:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232543#p232543</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232543#p232543"/>
<title type="html"><![CDATA[Re: Sygnatura produkcyjna i Lockbity w XMega - rozważania...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232543#p232543"><![CDATA[
<div class="quotetitle">gordon10 napisał(a):</div><div class="quotecontent"><br />Chyba nikt oprócz mnie się nad tym nie zastanawiał...<br /></div><br /><br />Kolego zastanawiał, zastanawiał... <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><!-- l --><a class="postlink-local" href="https://forum.atnel.pl/viewtopic.php?p=224996#p224996" >viewtopic.php?p=224996#p224996</a><!-- l --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1837">RadekB86</a> — 30 maja 2021, o 14:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gordon10]]></name></author>
<updated>2021-05-30T14:06:25+01:00</updated>
<published>2021-05-30T14:06:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232542#p232542</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232542#p232542"/>
<title type="html"><![CDATA[Re: Sygnatura produkcyjna i Lockbity w XMega - rozważania...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232542#p232542"><![CDATA[
Już wiem, że informacje w sygnaturze produkcyjnej są unikalne dla każdego procka. Pozostaje kwestia ich odczytania w programie.<br /> Chyba nikt oprócz mnie się nad tym nie zastanawiał...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=968">gordon10</a> — 30 maja 2021, o 14:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gordon10]]></name></author>
<updated>2021-05-20T15:12:08+01:00</updated>
<published>2021-05-20T15:12:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232448#p232448</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232448#p232448"/>
<title type="html"><![CDATA[Sygnatura produkcyjna i Lockbity w XMega - rozważania...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23788&amp;p=232448#p232448"><![CDATA[
... na temat zabezpieczenia programu.<br /><br />Witam,<br />Ostatnio czytałem na temat lock-bitów w AVR-ach (a konkretnie w XMwega) pod kątem zabezpieczenia procka przed niepowołanym dostępem. Okazuje się, że to nie jest takie oczywiste jak się wydaje, ponieważ po zabezpieczeniu procka przed odczytem z FLASH, mogą być problemy z odwołaniem się do stałych w pamięci FLASH. <br />Jednocześnie zainteresowałem się sygnaturą produkcyjną w prockach xmega i widzę po typie strukturalnym NVM_PROD_SIGNATURES_t, że zapisanych jest tam sporo danych.<br />Zastanawia mnie czy każdy egzemplarz procka ma swoje unikalne informacje w tej strukturze i czy można ją wykorzystać do zabezpieczenia programu?<br /> Pomysł jest taki, żeby przy starcie programu odczytywać te dane i sprawdzać z danymi danego porcka zapisanymi np. w jakiejś tabeli we flash. Jeśli tak, program idzie dalej, jeśli nie to koniec (pułapka programowa). Czyli program nie pójdzie na innym procku niż ten, na który został napisany.<br /><br />Mam tylko problem z realizacją tego pomysłu w eclipse. Czy są jakieś proste sposoby na odczytanie tych informacji (z sygnatury produkcyjnej) i realizację mojego pomysłu? Czy są one unikalne dla każdego egzemplarza? Będę wdzięczny za podpowiedzi i sugestie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=968">gordon10</a> — 20 maja 2021, o 15:12</p><hr />
]]></content>
</entry>
</feed>