{"id":1159,"date":"2018-08-05T20:17:41","date_gmt":"2018-08-05T20:17:41","guid":{"rendered":"http:\/\/hayperek.pl\/?p=1159"},"modified":"2018-08-05T20:22:09","modified_gmt":"2018-08-05T20:22:09","slug":"scalak-scalakowi-nierowny-czyli-kilka-slow-o-rewizjach","status":"publish","type":"post","link":"https:\/\/hayperek.pl\/en\/2018\/08\/05\/scalak-scalakowi-nierowny-czyli-kilka-slow-o-rewizjach\/","title":{"rendered":"Scalak scalakowi nier\u00f3wny, czyli kilka s\u0142\u00f3w o rewizjach"},"content":{"rendered":"<p>W dzisiejszym artykule chcia\u0142bym po raz kolejny poruszy\u0107 praktyczne aspekty prototypowania system\u00f3w wbudowanych, a zw\u0142aszcza spojrze\u0107 na problemy, z kt\u00f3rymi musi zmierzy\u0107 si\u0119 konstruktor. I tym razem b\u0119dzie to co\u015b prosto z &#8222;placu budowy&#8221; \ud83d\ude42<\/p>\n<p>Zapewne cz\u0119\u015b\u0107 z Czytelnik\u00f3w, kt\u00f3ra mia\u0142a kiedykolwiek do czynienia z podzespo\u0142ami elektronicznymi wie, i\u017c ka\u017cdy element posiada swoje oznaczenie. W przypadku prostych element\u00f3w pasywnych <em>(rezystory, kondensatory, itp.)<\/em> jest to ich warto\u015b\u0107 nominalna i ewentualnie dozwolone napi\u0119cie pracy. Nieco bardziej z\u0142o\u017cone podzespo\u0142y, w tym p\u00f3\u0142przewodniki s\u0105 ju\u017c zazwyczaj opisywane alfanumerycznym symbolem typu. Dobrym przyk\u0142adem jest tu nasz mikrokontroler <em>STM32F429ZTI6<\/em>. Ujednolicenie i skatalogowanie wszystkich typ\u00f3w i modeli podzespo\u0142\u00f3w pozwala konstruktorom o wiele \u0142atwiej projektowa\u0107 uk\u0142ady oraz upraszcza ewentualn\u0105 ich napraw\u0119.<\/p>\n<p>Innymi s\u0142owy znajomo\u015b\u0107 oznaczenia elementu zasadniczo powinna implikowa\u0107 dok\u0142adn\u0105 wiedz\u0119 na temat parametr\u00f3w czy funkcjonalno\u015bci danego podzespo\u0142u&#8230;<\/p>\n<p>Jednak czy aby na pewno?<\/p>\n<h5>Czym jest rewizja?<\/h5>\n<p>Jak wiadomo, im bardziej skomplikowany i z\u0142o\u017cony jest dany produkt, tym wi\u0119ksze prawdopodobie\u0144stwo, i\u017c na etapie projektowania lub produkcji wkradnie si\u0119 b\u0142\u0105d. Podobnie rzecz si\u0119 ma z mikrokontrolerami. Nierzadko dopiero kiedy nowa seria trafi w r\u0119ce odbiorc\u00f3w, okazuje si\u0119, \u017ce nie wszystkie funkcjonalno\u015bci dzia\u0142aj\u0105 poprawnie w ka\u017cdych warunkach. Niestety w takiej sytuacji nie ma ju\u017c mo\u017cliwo\u015bci naprawy usterek, gdy\u017c wi\u0105za\u0142oby si\u0119 to z.. fizyczn\u0105 ingerencj\u0105 w krzemow\u0105 p\u0142ytk\u0119, na kt\u00f3rej wytrawiono struktur\u0119 scalaka.<\/p>\n<p>W takim wypadku producent uk\u0142ad\u00f3w przygotowuje niezb\u0119dne korekty do projektu i wdra\u017ca je na linii produkcyjnej. Zestaw takich poprawek nazywany jest w\u0142a\u015bnie rewizj\u0105. &#8222;Nowe&#8221; podzespo\u0142y, cho\u0107 posiadaj\u0105 identyczne oznaczenie typu, musz\u0105 by\u0107 w jaki\u015b spos\u00f3b odr\u00f3\u017cnialne od swoich wadliwych poprzednik\u00f3w. W tym celu wprowadza si\u0119 dodatkowy symbol, najcz\u0119\u015bciej literowy lub liczbowy ,kt\u00f3ry pozwala okre\u015bli\u0107 z jak\u0105 rewizj\u0105 uk\u0142adu mamy do czynienia.<\/p>\n<p>Ponadto publikowana jest errata, zawieraj\u0105ca szczeg\u00f3\u0142owe informacje dotycz\u0105ce istniej\u0105cych problem\u00f3w, zauwa\u017conych w ka\u017cdej z rewizji. Je\u015bli dan\u0105 usterk\u0119 mo\u017cna omin\u0105\u0107 lub ograniczy\u0107 jej wyst\u0119powanie metodami czysto software&#8217;owymi, w erracie znajdziemy tak\u017ce dok\u0142adny opis jak to osi\u0105gn\u0105\u0107.<\/p>\n<h5>Problemy z prototypem<\/h5>\n<p>Uruchamiaj\u0105 drugi prototyp urz\u0105dzenia przeznaczony do test\u00f3w w samochodzie, zauwa\u017cy\u0142em bardzo niepokoj\u0105ce zniekszta\u0142cenia obrazu, widoczne na poni\u017cszym zdj\u0119ciu.<\/p>\n<p><a href=\"http:\/\/hayperek.pl\/wp-content\/uploads\/2018\/08\/lcd.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/hayperek.pl\/wp-content\/uploads\/2018\/08\/lcd-1024x768.jpg\" alt=\"\" width=\"720\" height=\"540\" class=\"aligncenter size-large wp-image-1167\" srcset=\"https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/08\/lcd-1024x768.jpg 1024w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/08\/lcd-600x450.jpg 600w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/08\/lcd-300x225.jpg 300w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/08\/lcd-768x576.jpg 768w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/08\/lcd.jpg 1040w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/a><\/p>\n<p>Pierwsze podejrzenie pad\u0142o oczywi\u015bcie na zasilanie. Jednak po skontrolowaniu wszystkich szyn zasilania i kondensator\u00f3w odsprz\u0119gaj\u0105cych stwierdzi\u0142em, i\u017c to nie tu le\u017cy problem. Ostatecznie wykluczy\u0142em wp\u0142yw jakichkolwiek zak\u0142\u00f3ce\u0144, obni\u017caj\u0105c taktowanie zegara ze 180MHz do 30MHz. Kolejne eksperymenty skierowa\u0142y moj\u0105 uwag\u0119 na kontroler FMC. Jak pami\u0119tamy pe\u0142ni on w naszym systemie podw\u00f3jn\u0105 rol\u0119: steruje wy\u015bwietlaczem LCD oraz stanowi interfejs do zewn\u0119trznej pami\u0119ci SDRAM. Zauwa\u017cy\u0142em, \u017ce dok\u0142adnie co \u00f3sma kolumna pikseli jest wygaszona, co pokrywa\u0142o si\u0119 z form\u0105 transmisji obrazu na wy\u015bwietlacz. Z bufora obrazu odczytywanych jest bowiem jednocze\u015bnie 8 kolejnych pikseli, a nast\u0119pnie s\u0105 one wysy\u0142ane kolejno do wy\u015bwietlacza LCD. <\/p>\n<p>To sk\u0142oni\u0142o mnie do przegl\u0105dni\u0119cia erraty dla uk\u0142ad\u00f3w STM32F4xx. Natrafi\u0142em tam na ciekawy problem, pasuj\u0105cy do poczynionych obserwacji: <strong><em>Section 2.11.7: FMC dynamic and static bank switching<\/strong><\/em><\/p>\n<p><a href=\"http:\/\/hayperek.pl\/wp-content\/uploads\/2018\/08\/table.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/hayperek.pl\/wp-content\/uploads\/2018\/08\/table-1024x579.png\" alt=\"\" width=\"720\" height=\"407\" class=\"aligncenter size-large wp-image-1165\" srcset=\"https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/08\/table-1024x579.png 1024w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/08\/table-600x339.png 600w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/08\/table-300x170.png 300w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/08\/table-768x434.png 768w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/08\/table.png 1182w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/a><\/p>\n<p>Jak wida\u0107, problem wyst\u0119puje w rewizjach: <strong>A<\/strong>, <strong>Y<\/strong> and <strong>1<\/strong>. Poprawiony zosta\u0142 w rewizji <strong>3<\/strong>. Zgodnie z architektur\u0105, SDRAM jest obs\u0142ugiwany jako pami\u0119\u0107 dynamiczna, czyli wymagaj\u0105ca od\u015bwie\u017cania, za\u015b wy\u015bwietlacz LCD pracuje w trybie pami\u0119ci statycznej. Tak wi\u0119c kopiowanie danych z pami\u0119ci na wy\u015bwietlacz wymaga prze\u0142\u0105czania si\u0119 mi\u0119dzy dwoma bankami pami\u0119ci: dynamicznym i statycznym.<\/p>\n<p>P\u0142yta ewaluacyjna oraz pierwszy prototyp zawiera\u0142y uk\u0142ady w wersji z rewizji <strong>3<\/strong>. Oznacza to, i\u017c na nich nie mieli\u015bmy szans zauwa\u017cy\u0107 tego problemu. Jak si\u0119 okaza\u0142o, do drugiego prototypu trafi\u0142 nieco starszy uk\u0142ad, w rewizji <strong>Y<\/strong>. Wymiana mikrokontrolera rozwi\u0105za\u0142a problem.<\/p>\n<p>Errata podaje co prawda rozwi\u0105zanie (czy raczej obej\u015bcie&#8230;) problemu, kt\u00f3re polega na prze\u0142\u0105czeniu pami\u0119ci SDRAM w tzw. tryb <em>self-refresh<\/em> ka\u017cdorazowym przed dost\u0119pem do pami\u0119ci statycznej <em>(czyli wy\u015bwietlacza LCD)<\/em>. W naszym przypadku jest to jednak nieakceptowalne ze wzgl\u0119du na znacz\u0105cy spadek wydajno\u015bci oraz zmniejszenie cz\u0119stotliwo\u015bci od\u015bwie\u017cania ekranu. Dzieje si\u0119 tak poniewa\u017c de facto na czas zapisu do pami\u0119ci statycznej wy\u0142\u0105czamy bank SDRAM. Za\u015b jego ponowne uruchomienie poch\u0142onie cenne mikrosekundy.<\/p>\n<h5>Podsumowanie<\/h5>\n<p>Mam nadziej\u0119, \u017ce dzisiejszym artyku\u0142em cho\u0107 troch\u0119 odczarowa\u0142em kolejny &#8222;magiczny problem&#8221; elektroniki. Jak wida\u0107 nie zawsze wystarczy okre\u015bli\u0107 dok\u0142adnie typ uk\u0142adu scalonego &#8211; zw\u0142aszcza w przypadku mikrokontroler\u00f3w i SoC&#8217;\u00f3w <em>(System on Chip)<\/em>.<\/p>\n<p>W hobbystycznych projektach bardzo rzadko zdarza si\u0119 natrafi\u0107 na tego rodzaju problemy &#8211; nam si\u0119 to jednak uda\u0142o! Jest to kolejne cenne do\u015bwiadczenie i lekcja na przysz\u0142o\u015b\u0107.<\/p>","protected":false},"excerpt":{"rendered":"<p>W dzisiejszym artykule chcia\u0142bym po raz kolejny poruszy\u0107 praktyczne aspekty prototypowania system\u00f3w wbudowanych, a zw\u0142aszcza spojrze\u0107 na problemy, z kt\u00f3rymi musi zmierzy\u0107 si\u0119 konstruktor. I tym razem b\u0119dzie to co\u015b prosto z &#8222;placu budowy&#8221; \ud83d\ude42 Zapewne cz\u0119\u015b\u0107 z Czytelnik\u00f3w, kt\u00f3ra mia\u0142a kiedykolwiek do czynienia z podzespo\u0142ami elektronicznymi wie, i\u017c ka\u017cdy element posiada swoje oznaczenie. W [&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-1159","post","type-post","status-publish","format-standard","hentry","category-stodni"],"_links":{"self":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts\/1159","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=1159"}],"version-history":[{"count":8,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts\/1159\/revisions"}],"predecessor-version":[{"id":1171,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts\/1159\/revisions\/1171"}],"wp:attachment":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/media?parent=1159"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/categories?post=1159"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/tags?post=1159"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}