{"id":324,"date":"2018-03-22T21:48:07","date_gmt":"2018-03-22T21:48:07","guid":{"rendered":"http:\/\/hayperek.pl\/?p=324"},"modified":"2018-03-22T21:48:07","modified_gmt":"2018-03-22T21:48:07","slug":"hardware-czyli-co-w-cpu-piszczy","status":"publish","type":"post","link":"https:\/\/hayperek.pl\/en\/2018\/03\/22\/hardware-czyli-co-w-cpu-piszczy\/","title":{"rendered":"Hardware &#8211; czyli co w CPU piszczy"},"content":{"rendered":"<p>Dzi\u015b zastanowimy si\u0119, jak na podstawie za\u0142o\u017ce\u0144 opisanych w <a href=\"http:\/\/hayperek.pl\/en\/2018\/03\/21\/start\/\">poprzednim po\u015bcie<\/a> wybra\u0107 serce (a raczej m\u00f3zg) naszego projektu czyli mikrokontroler. Przyjrzymy si\u0119 kilku rodzinom, kt\u00f3re do\u015b\u0107 dobrze znam i z kt\u00f3rymi pracuj\u0119 na bie\u017c\u0105co. Oczywi\u015bcie lista nie wyczerpuje tematu i na pewno jest jeszcze wielu, wielu innych kandydat\u00f3w.<\/p>\n<h5>8-bitowy AVR:<\/h5>\n<p>Zalety:<\/p>\n<ul class=\"pro_cons_list\">\n<li class=\"pro_item\">niska cena,<\/li>\n<li class=\"pro_item\">trywialna konfiguracja,<\/li>\n<li class=\"pro_item\">szeroka gama dost\u0119pnych system\u00f3w ewaluacyjnych (np. Arduino),<\/li>\n<li class=\"pro_item\">logika 5V, odporna na zak\u0142\u00f3cenia<\/li>\n<li class=\"pro_item\">w pe\u0142ni darmowy toolchain, oparty o gcc<\/li>\n<\/ul>\n<p>Wady:<\/p>\n<ul class=\"pro_cons_list\">\n<li class=\"cons_item\">ograniczona wydajno\u015b\u0107,<\/li>\n<li class=\"cons_item\">niewielka ilo\u015b\u0107 wbudowanej pami\u0119ci flash (do 256kB) oraz RAM (do 16kB),<\/li>\n<li class=\"cons_item\">niskie taktowanie zegara CPU &#8211; do 20MHz w przypadku AVR,<\/li>\n<li class=\"cons_item\">ograniczony wyb\u00f3r mikrokontroler\u00f3w z wbudowanym kontrolerem CAN,<\/li>\n<li class=\"cons_item\">ma\u0142a ilo\u015b\u0107 uk\u0142ad\u00f3w peryferyjnych (UART, SPI),<\/li>\n<li class=\"cons_item\">brak elastycznej konfiguracji pin\u00f3w (port mux),<\/li>\n<li class=\"cons_item\">interfejs JTAG zajmuj\u0105cy kilka cennych pin\u00f3w,<\/li>\n<\/ul>\n<hr \/>\n<h5>AVR32:<\/h5>\n<p>Zalety:<\/p>\n<ul class=\"pro_cons_list\">\n<li class=\"pro_item\">wi\u0119ksza wydajno\u015b\u0107 ni\u017c w przypadku 8-bitowych kuzyn\u00f3w,<\/li>\n<li class=\"pro_item\">do 64kB RAM i 512kB flash,<\/li>\n<li class=\"pro_item\">du\u017ca ilo\u015b\u0107 peryferi\u00f3w,<\/li>\n<\/ul>\n<p>Wady:<\/p>\n<ul class=\"pro_cons_list\">\n<li class=\"cons_item\">brak wsparcia &#8211; uk\u0142ady nie s\u0105 ju\u017c produkowane,<\/li>\n<\/ul>\n<hr \/>\n<h5>PIC32:<\/h5>\n<p>Zalety:<\/p>\n<ul class=\"pro_cons_list\">\n<li class=\"pro_item\">niez\u0142a wydajno\u015b\u0107,<\/li>\n<li class=\"pro_item\">du\u017ca ilo\u015b\u0107 pami\u0119ci RAM 256kB oraz flash 512kB,<\/li>\n<li class=\"pro_item\">du\u017ca ilo\u015b\u0107 uk\u0142ad\u00f3w peryferyjnych,<\/li>\n<li class=\"pro_item\">wbudowany kontroler magistrali CAN,<\/li>\n<\/ul>\n<p>Wady:<\/p>\n<ul class=\"pro_cons_list\">\n<li class=\"cons_item\">mniej rozwini\u0119te community ni\u017c w przypadku innych mikrokontroler\u00f3w,<\/li>\n<li class=\"cons_item\">darmowa wersja kompilatora MPLAB nie pozwala na optymalizacj\u0119 kodu,<\/li>\n<li class=\"cons_item\">ma\u0142y wyb\u00f3r zestaw\u00f3w ewaluacyjnych,<\/li>\n<\/ul>\n<hr \/>\n<h5>STM32<\/h5>\n<p>Zalety:<\/p>\n<ul class=\"pro_cons_list\">\n<li class=\"pro_item\">wysoka wydajno\u015b\u0107 CPU, zw\u0142aszcza w przypadku linii F4 oraz F7 (Cortex-M4),<\/li>\n<li class=\"pro_item\">sprz\u0119towe wsparcie dla operacji zmiennoprzecinkowych (FPU),<\/li>\n<li class=\"pro_item\">du\u017ca ilo\u015b\u0107 uk\u0142ad\u00f3w peryferyjnych,<\/li>\n<li class=\"pro_item\">wbudowany kontroler magistrali CAN,<\/li>\n<li class=\"pro_item\">konfigurowalny multiplekser pin\u00f3w,<\/li>\n<li class=\"pro_item\">du\u017ca ilo\u015b\u0107 pami\u0119ci flash (do 1MB) oraz RAM (do 320kB),<\/li>\n<li class=\"pro_item\">wygodny, dwuprzewodowy interfejs ST-LINK do debugowania,<\/li>\n<li class=\"pro_item\">w pe\u0142ni darmowy toolchain ,<\/li>\n<\/ul>\n<p>Wady:<\/p>\n<ul class=\"pro_cons_list\">\n<li class=\"cons_item\">z\u0142o\u017cona konfiguracja peryferi\u00f3w,<\/li>\n<li class=\"cons_item\">logika 3.3V, nieco bardziej wra\u017cliwa na zak\u0142\u00f3cenia,<\/li>\n<li class=\"cons_item\">wi\u0119ksza ilo\u015b\u0107 wymaganych zewn\u0119trznych element\u00f3w dyskretnych &#8211; g\u0142\u00f3wnie kondensator\u00f3w odsprz\u0119gaj\u0105cych,<\/li>\n<\/ul>\n<hr \/>\n<h5>RaspberryPi Zero (Broadcom BCM2835):<\/h5>\n<p>Zalety:<\/p>\n<ul class=\"pro_cons_list\">\n<li class=\"pro_item\">niska cena,<\/li>\n<li class=\"pro_item\">ogromna ilo\u015b\u0107 pami\u0119ci (512MB),<\/li>\n<li class=\"pro_item\">kosmiczna wydajno\u015b\u0107 (jak na nasze potrzeby),<\/li>\n<\/ul>\n<p>Wady:<\/p>\n<ul class=\"pro_cons_list\">\n<li class=\"cons_item\">skromna ilo\u015b\u0107 interfejs\u00f3w zewn\u0119trznych,<\/li>\n<li class=\"cons_item\">du\u017cy pob\u00f3r pr\u0105du w stanie spoczynku,<\/li>\n<\/ul>\n<h4>Werdykt i uzasadnienie<\/h4>\n<p>Pierwszym, kt\u00f3ry odpad\u0142 z zestawienia by\u0142 oczywi\u015bcie AVR. Cho\u0107 w swojej &#8222;przypakowanej&#8221; formie (ATmega) jest na prawd\u0119 bardzo silnym i wdzi\u0119cznym prockiem, to w zderzeniu z naszymi wymaganiami musi uzna\u0107 wy\u017cszo\u015b\u0107 konkurent\u00f3w &#8211; zw\u0142aszcza pod wzgl\u0119dem wydajno\u015bci w grafice, kt\u00f3ra przecie\u017c jest jednym z kluczowych element\u00f3w. Dodatkowo niewielka ilo\u015b\u0107 peryferi\u00f3w skutecznie wy\u0142\u0105cza go z gry. Podobnie sprawa si\u0119 ma z &#8222;malink\u0105&#8221; RaspberryPi Zero, kt\u00f3ra r\u00f3wnie\u017c nie mo\u017ce pochwali\u0107 si\u0119 szerok\u0105 gam\u0105 uk\u0142ad\u00f3w I\/O. Procesory ze stajni Microchipa (AVR32 oraz PIC32) s\u0105 wydajne i dobrze wyposa\u017cone, jednak brak im wsparcia technicznego i rozbudowanej spo\u0142eczno\u015bci jak\u0105 wytworzy\u0142 AVR czy popularne ARMy r\u00f3\u017cnych producent\u00f3w. Dodatkowo odstraszaj\u0105 ograniczone mo\u017cliwo\u015bci darmowej wersji kompilatora MPLAB.<\/p>\n<p>Na koniec pozosta\u0142 on, nolens volens nasz zwyci\u0119zca &#8211; STM32. Spo\u015br\u00f3d konkurent\u00f3w wyr\u00f3\u017cnia si\u0119 przede wszystkim dobr\u0105 wydajno\u015bci\u0105, du\u017c\u0105 gam\u0105 peryferi\u00f3w, dobrym wsparciem technicznym i ogromnym community. Oczywi\u015bcie na tle innych ARM\u00f3w wypada do\u015b\u0107 przeci\u0119tnie, ot jest po prostu kolejnym przedstawicielem tej wielkiej rodziny. Dlatego zapewne wielu z Was zarzuci mi, \u017ce przecie\u017c:<\/p>\n<blockquote><p>procek XXX od YYY jest o niebo lepszy, bo ma ZZZ i \u017b\u017b\u017b i \u0179\u0179\u0179 i w og\u00f3le wymiata!<\/p><\/blockquote>\n<p>Ok, pewnie b\u0119dzie w tym odrobina racji, ale pami\u0119tajmy &#8211; ograniczy\u0142em si\u0119 celowo do uk\u0142ad\u00f3w, kt\u00f3re znam, z kt\u00f3rymi pracuj\u0119 od wielu lat. Poznawanie nowych rodzin mikrokontroler\u00f3w jest ciekawe i zajmuj\u0105ce, ale na pewno nie jest najlepszym rozwi\u0105zaniem, je\u015bli mamy ograniczony bud\u017cet czasowy \ud83d\ude42<\/p>\n<h4>P\u0142ytka prototypowa<\/h4>\n<p>Poniewa\u017c wynajdywanie ko\u0142a na nowo nie jest dobrym zwyczajem in\u017cynierskim, jako baz\u0119 dla pierwszego prototypu postanowi\u0142em wykorzysta\u0107 p\u0142ytk\u0119 prototypow\u0105 STM32F4 z rodziny Discovery. Ma ona na swoim pok\u0142adzie mikrokontroler <a href=\"http:\/\/www.st.com\/en\/microcontrollers\/stm32f407-417.html?querycriteria=productId=LN11\">STM32F407VGT6 <\/a>, wbudowany interfejs debugowy ST-LINK oraz kilka mniej lub bardziej nam przydatnych uk\u0142ad\u00f3w, pokroju akcelerometru. Wszystkie piny mikrokontrolera zosta\u0142y wyprowadzone w wygodnej formie z\u0142\u0105cza goldpin. S\u0142u\u017cy mi ju\u017c dzielnie od kilku \u0142adnych lat i nie b\u0119dzie to jej pierwszy projekt \ud83d\ude42<br \/>\n<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-334 size-medium\" src=\"http:\/\/hayperek.pl\/wp-content\/uploads\/2018\/03\/stm32_board-300x225.jpg\" alt=\"\" width=\"300\" height=\"225\" srcset=\"https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/03\/stm32_board-300x225.jpg 300w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/03\/stm32_board-600x450.jpg 600w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/03\/stm32_board-768x576.jpg 768w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/03\/stm32_board-1024x768.jpg 1024w, https:\/\/hayperek.pl\/wp-content\/uploads\/2018\/03\/stm32_board.jpg 1200w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><br \/>\n<br \/>\nW ten spos\u00f3b uda\u0142o nam si\u0119 dokona\u0107 wyboru platformy sprz\u0119towej oraz bazy dla prototypu, kt\u00f3ra powinna nam wystarczy\u0107 na pierwszym etapie prac. <\/p>\n<p>Jutro zastanowimy si\u0119 nad wyborem j\u0119zyka programowania i systemu operacyjnego dla naszego urz\u0105dzenia, czyli pomy\u015blimy jak tchn\u0105\u0107 \u017cycie w kawa\u0142ek krzemu. Do zobaczenia!<\/p>","protected":false},"excerpt":{"rendered":"<p>Dzi\u015b zastanowimy si\u0119, jak na podstawie za\u0142o\u017ce\u0144 opisanych w poprzednim po\u015bcie wybra\u0107 serce (a raczej m\u00f3zg) naszego projektu czyli mikrokontroler. Przyjrzymy si\u0119 kilku rodzinom, kt\u00f3re do\u015b\u0107 dobrze znam i z kt\u00f3rymi pracuj\u0119 na bie\u017c\u0105co. Oczywi\u015bcie lista nie wyczerpuje tematu i na pewno jest jeszcze wielu, wielu innych kandydat\u00f3w. 8-bitowy AVR: Zalety: niska cena, trywialna konfiguracja, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":342,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":{"0":"post-324","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-stodni","9":"post-with-thumbnail","10":"post-with-thumbnail-large"},"_links":{"self":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts\/324","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=324"}],"version-history":[{"count":18,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts\/324\/revisions"}],"predecessor-version":[{"id":345,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts\/324\/revisions\/345"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/media\/342"}],"wp:attachment":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/media?parent=324"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/categories?post=324"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/tags?post=324"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}