{"id":1108,"date":"2018-06-26T20:50:42","date_gmt":"2018-06-26T20:50:42","guid":{"rendered":"http:\/\/hayperek.pl\/?p=1108"},"modified":"2018-06-28T20:50:53","modified_gmt":"2018-06-28T20:50:53","slug":"odrobina-magii-czyli-debugowanie-sprzetu","status":"publish","type":"post","link":"https:\/\/hayperek.pl\/en\/2018\/06\/26\/odrobina-magii-czyli-debugowanie-sprzetu\/","title":{"rendered":"Odrobina magii, czyli debugowanie sprz\u0119tu"},"content":{"rendered":"<p>W dzisiejszym artykule chcia\u0142bym na pewnym przyk\u0142adzie pokaza\u0107, jak wygl\u0105daj\u0105 zmagania z problemami stricte sprz\u0119towymi. S\u0105 one o wiele trudniejsze ni\u017c te zwi\u0105zane z oprogramowaniem, gdy\u017c nie mo\u017cna unikn\u0105\u0107 ich za pomoc\u0105 test\u00f3w, a odnalezienie \u017ar\u00f3d\u0142a wymaga czego\u015b wi\u0119cej ni\u017c tylko uruchomienia debugera.<\/p>\n<blockquote><p>Na jaki problem natrafili\u015bmy?<\/p><\/blockquote>\n<p>Ot\u00f3\u017c jak pami\u0119tacie, w naszym systemie zdecydowali\u015bmy si\u0119 wykorzysta\u0107 zewn\u0119trzn\u0105 ko\u015b\u0107 pami\u0119ci SDRAM. Do jej obs\u0142ugi wykorzystujemy zintegrowany kontroler pami\u0119ci FMC. O ile konfiguracja samego kontrolera nie nastr\u0119czy\u0142a wi\u0119kszych problem\u00f3w, to utkn\u0105\u0142em na dobre przy pr\u00f3bie &#8222;o\u017cywienia&#8221; ko\u015bci pami\u0119ci. Aby uruchomi\u0107 SDRAM nale\u017cy wys\u0142a\u0107 do uk\u0142adu kilka polece\u0144, kt\u00f3re odpowiednio skonfiguruj\u0105 ko\u015b\u0107. <\/p>\n<blockquote><p>W czym problem?<\/p><\/blockquote>\n<p>Ot\u00f3\u017c ka\u017cdy producent i niemal\u017ce ka\u017cdy model pami\u0119ci SDRAM posiada nieco inn\u0105 struktur\u0119 rejestr\u00f3w konfiguracyjnych. Dotychczas korzysta\u0142em z uk\u0142ad\u00f3w IS42S16400<strong>J<\/strong><br \/>\n, kt\u00f3re umieszczano m.in. na p\u0142ytkach z serii STM32F4-DISCOVERY. Do budowy prototypu zdecydowa\u0142em si\u0119 u\u017cy\u0107 uk\u0142adu IS42S16400<strong>B<\/strong>, kt\u00f3ry pozornie r\u00f3\u017cni\u0142 si\u0119 jedynie nieco ni\u017csz\u0105 maksymaln\u0105 cz\u0119stotliwo\u015bci\u0105 taktowania.<\/p>\n<p>Jak si\u0119 okaza\u0142o nie tylko \ud83d\ude42<\/p>\n<p>Objawy by\u0142y bardzo interesuj\u0105ce i niepokoj\u0105ce zarazem. Niekt\u00f3re cykle zapisu\/odczytu udawa\u0142y si\u0119, jednak zdecydowana wi\u0119kszo\u015b\u0107 by\u0142a ko\u0144czy\u0142a si\u0119 przek\u0142amaniami danych. I to w bardzo ciekawej formie, gdy\u017c zapis 32 bit\u00f3w (4 bajt\u00f3w) skutkowa\u0142 dwukrotnym zapisaniem powt\u00f3rzonych dolnych 16 bit\u00f3w. <\/p>\n<p>Pierwsze podejrzenie pad\u0142o na p\u0142ytk\u0119 PCB. Zdecydowana wi\u0119kszo\u015b\u0107 problem\u00f3w z pami\u0119ciami SDRAM ma swoje \u017ar\u00f3d\u0142o w niedostatecznym odsprz\u0119gni\u0119ciu szyn zasilaj\u0105cych, b\u0142\u0119dnym prowadzeniu \u015bcie\u017cek sygna\u0142\u00f3w  lub masy. Czyli potencjalnie mo\u017ce to oznacza\u0107 konieczno\u015b\u0107 wykonania od nowa projektu oraz prototypu PCB&#8230; A to zajmuje sporo czasu \ud83d\ude41 Aby mie\u0107 pewno\u015b\u0107 zdecydowa\u0142em si\u0119 znacz\u0105co obni\u017cy\u0107 taktowanie pami\u0119ci &#8211; w\u00f3wczas wszelkie zak\u0142\u00f3cenia spowodowane stricte elektryczn\u0105 cz\u0119\u015bci\u0105 powinny by\u0107 znacznie mniej uci\u0105\u017cliwe. <\/p>\n<p>Niestety okaza\u0142o si\u0119, i\u017c problem pozosta\u0142. To sk\u0142oni\u0142o mnie przyjrze\u0107 si\u0119 bli\u017cej konfiguracji. Odkry\u0142em pewien pozornie nic nieznacz\u0105cy szczeg\u00f3\u0142 w dokumentacji. Ot\u00f3\u017c struktura rejestru konfiguracyjnego uk\u0142ad\u00f3w w wersji <strong>J<\/strong> umo\u017cliwia skonfigurowanie trybu <strong>zapisu<\/strong> sekwencyjnego za pomoc\u0105 bitu A9.<\/p>\n<p><a href=\"http:\/\/hayperek.pl\/wp-content\/uploads\/2018\/06\/is_j.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/hayperek.pl\/wp-content\/uploads\/2018\/06\/is_j.png\" alt=\"\" width=\"720\" height=\"628\" class=\"aligncenter size-large wp-image-1110\" srcset=\"https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/06\/is_j.png 889w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/06\/is_j-600x523.png 600w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/06\/is_j-300x262.png 300w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/06\/is_j-768x670.png 768w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/a><\/p>\n<p>Uk\u0142ady serii <strong>B<\/strong> ju\u017c takowej opcji nie maj\u0105, a bit A9 oznaczono jako zarezerwowany.<\/p>\n<p><a href=\"http:\/\/hayperek.pl\/wp-content\/uploads\/2018\/06\/is_b.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/hayperek.pl\/wp-content\/uploads\/2018\/06\/is_b.png\" alt=\"\" width=\"896\" height=\"777\" class=\"aligncenter size-full wp-image-1109\" srcset=\"https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/06\/is_b.png 896w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/06\/is_b-600x520.png 600w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/06\/is_b-300x260.png 300w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/06\/is_b-768x666.png 768w\" sizes=\"auto, (max-width: 896px) 100vw, 896px\" \/><\/a><\/p>\n<p>Jak \u0142atwo si\u0119 domy\u015bli\u0107, w u\u017cywanej przez nas konfiguracji ustawiali\u015bmy bit A9. Pozornie nie powinien mie\u0107 on znaczenia w uk\u0142adach serii <strong>B<\/strong>. Jednak jak si\u0119 p\u00f3\u017aniej okaza\u0142o, jego &#8222;zgaszenie&#8221; naprawi\u0142o problem \ud83d\ude42 Czyli jednak &#8222;mia\u0142 znaczenie&#8221;&#8230;<\/p>","protected":false},"excerpt":{"rendered":"<p>W dzisiejszym artykule chcia\u0142bym na pewnym przyk\u0142adzie pokaza\u0107, jak wygl\u0105daj\u0105 zmagania z problemami stricte sprz\u0119towymi. S\u0105 one o wiele trudniejsze ni\u017c te zwi\u0105zane z oprogramowaniem, gdy\u017c nie mo\u017cna unikn\u0105\u0107 ich za pomoc\u0105 test\u00f3w, a odnalezienie \u017ar\u00f3d\u0142a wymaga czego\u015b wi\u0119cej ni\u017c tylko uruchomienia debugera. Na jaki problem natrafili\u015bmy? Ot\u00f3\u017c jak pami\u0119tacie, w naszym systemie zdecydowali\u015bmy si\u0119 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-1108","post","type-post","status-publish","format-standard","hentry","category-stodni"],"_links":{"self":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts\/1108","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/comments?post=1108"}],"version-history":[{"count":3,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts\/1108\/revisions"}],"predecessor-version":[{"id":1113,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts\/1108\/revisions\/1113"}],"wp:attachment":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/media?parent=1108"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/categories?post=1108"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/tags?post=1108"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}