Skocz do zawartości

Oryginalność mikrokontrolerów AVR z Chin


Sabre

Pomocna odpowiedź

Elvis

Haha .., z tego wszystkiego wykopałem swój stary projekt w którym kiedyś zgrałem w AVR ze sobą parę przerwań. Masz racje w AVR'ach można zagnieździć przerwania i to nie ruszając wskaźnika stosu 😃

[ Dodano: 20-06-2016, 13:34 ]

nse: "Na moment obsługi LED'ów wystarczy zablokować przerwania"

To właśnie nazywam sekcją krytyczną i przecież właśnie to postulowałem.

Tego inaczej nie da się rozwiązać ?, oczywiście dobrze też by było wykasować flagi zgłoszonych przerwań które mogą już być nieaktualne ...

Ps.Podziwiam samozaparcie w merytorycznym objaśnianiu zagadnień.

Szczere Ukłony 🙂

Link do komentarza
Share on other sites

"..w AVR'ach można zagnieździć przerwania.."

To problem stary jak świat procesorów. Po jednej stronie mamy skomplikowany, wielopoziomowy system przerwań w którym kontroler przerwań zajmuje się ich wydzielaniem wg priorytetów a jądro CPU ma zawsze pewien poziom na którym pracuje i z którego nic słabszego wyrwać go nie może. Wiąże się to z koniecznością zapamiętywania poziomu z jakiego wychodzimy i odtwarzania go gdy wracamy z funkcji obsługi przerwania. Z małych układów miało coś takiego nawet stare 8051, mają XMEGA. Po drugiej stronie mamy procesory gdzie z definicji jest tylko jeden poziom (plus tryb pracy programu głównego - to jasne) a programista nie ma nawet możliwości zrobienia wielu poziomów, bo nie ma dostępu do bitu stanu CPU - tak jest w np. historycznym już dzisiaj 8048. Pomijam procesory 4-bitowe typu 4004 czy 4040, bo kogo to dzisiaj obchodzi. W każdym razie projektując AVR wybrano rozwiązanie pośrednie: sprzęt obsługuje system jednopoziomowy (wszelkie przerwania są automatycznie blokowane w chwili akceptacji jednego z nich), ale przez programowe odblokowanie przerwań zaraz po wejściu do ISR i odpowiednie zarządzanie bitami zgłoszeń i masek mamy możliwość zorganizowania systemu wielopoziomowego. Trochę to dziwne (takie założenie), bo w mikrokontrolerach elastyczny system przerwań jest co najmniej tak samo ważny jak timery, ADC itp a krzem jest tani i kilkaset bramek czy przerzutników więcej nie powinno robić różnicy. Trzeba jednak pamiętać, że AVRy były początkowo malutkimi prockami (urban legend niesie, że zrobionymi przez paru studentów jako wprawka) z dziwną listą instrukcji i niepewną przyszłością. A potem to już poszło..

Tak więc programowe "sztuczki" z systemem przerwań nie są niczym nowym a wręcz stanowią klasykę problemów programowania embedded.

  • Lubię! 1
Link do komentarza
Share on other sites

"Pomijam procesory 4-bitowe typu 4004 czy 4040, bo kogo to dzisiaj obchodzi."

Komputery powstały z piasku, tylko kto by chciał o tym pamiętać pisząc programy w wysokopoziomowych językach ?

Pozdrawiam 🙂

Link do komentarza
Share on other sites

Chodziło mi o pokazanie rozwoju struktur procesorów. 4004 nie miał przerwań w ogóle, 4040 bardzo prymitywne jedno przerwanie zewnętrzne, ale potem było coraz lepiej. 8080 miał jedno, ale bardzo łatwo rozszerzalne do 8 wejść przerwań a Z80 dostał nawet przerwanie niemaskowalne. W tym czasie zaczęto poważnie myśleć o kontrolerach w pełni jednoukładowych, gdzie prawie od razu pojawiły się wbudowane peryferia (timer) zgłaszające przerwania. I ponieważ eskalacja skomplikowania systemów przerwań była duża i szybka, dziwi mnie trochę ta niefrasobliwość ATMELa. Jedynym (oprócz legendy o studentach) wytłumaczeniem jest fakt, że trochę zachłyśnięto się bezakumulatorową architekturą RISC umożliwiającą przy ówczesnej technologii znaczne przyspieszenie pracy CPU. Z 1 MIPSowej 8051 dostaliśmy nagle 10MIPSowy, tani kontroler AVR. Jego szybkość mogła teoretycznie "obsłużyć" braki w sprzęcie, ale.. jak było dalej to już wiemy.

Dopiero mając jakiś przegląd można pokusić się o ocenę tego czego się akurat używa. Na tle konkurencji, systemowi przerwań AVR bardzo brakuje sprzętowej wielopoziomowości co - moim zdaniem zbyt późno - zostało nadrobione w rodzinie XMEGA.

Jeżeli jesteś czegoś ciekaw to pytaj, ale prawdy (te o piasku) na poziomie gazety z kiosku raczej niczego nie wnoszą. Albo ja (to już prędzej) nie łapię dowcipu...

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

marek1707

Ten piasek, to alegoria podstawy działania procesora na który się pisze program 😉

Zachłyśnięci możliwościami i wydajnością wysokopoziomowych języków programowania, zapomina się o podstawowej wiedzy dotyczącej procesorów 🙁

Jako sporadyczny gość na tym forum, proponowałbym kontynuacje tematu, pod tytułem

"Jak sprawdzić rzeczywiste zasoby używanego procesora ?"

Link do komentarza
Share on other sites

"Um, przeczytać notę katalogową? "

Wtedy poznamy deklarowane zasoby, a nie rzeczywiste 🙂

Takie przekręty miały już miejsce i to na masową skale, przykładowo z sprowadzanymi półprzewodnikami. Obudowa ta sama napis ok, ale zamiast BU2525 był parametrami zgodny z BU508 i działał przez chwilę 🙁 Procesor też może zgłaszać sygnaturę przykładowo Atmegi32, a być Atmegą16 ... i co z tym fantem wtedy zrobić ?

O tym pisał jnk0le 16-06-2016, 16:02

https://www.forbot.pl/forum/topics49/oryginalnosc-mikrokontrolerow-avr-z-chin-vt12863,75.htm#108357

, takie rzeczy nie tylko w erze się zdarzają i sprawiają wiele kłopotów ...

Link do komentarza
Share on other sites

Przeczytać notę katalogową do części, którą rzeczywiście posiadasz. Jak dojść do tego co rzeczywiście masz? Najprościej kupować z zaufanych źródeł. Jeśli to z jakichkolwiek powodów odpada, to pozostaje ci http://dangerousprototypes.com/store/decap i porównanie obrazków ze znaną dobrą częścią.

[ Dodano: 21-06-2016, 09:45 ]

Natomiast to o czym pisał jnk0le w kontekście mikrokontrolerów to chyba legendy jakieś. Głównym kosztem wykonania mikrokontrolera jest nadal zaprojektowanie masek -- nikt nie będzie się w to bawić żeby podrobić chip z mniejszą ilością ramu.

Link do komentarza
Share on other sites

"-- nikt nie będzie się w to bawić żeby podrobić chip z mniejszą ilością ramu. "

Wystarczy różnica w cenie, a chętni w tą zabawę się znajdą 🙁

Kiedyś nawet w TME kupiłem wadliwe STR58041, dopiero jak sprowadziłem ten układ z autoryzowanego serwisu wyjaśniło się co nie tak i musieli mi zwrócić kasę, różnice można było wychwycić zwyczajnym miernikiem tylko był potrzebny sprawny układ.

Link do komentarza
Share on other sites

Ja mówię o podrabianych mikrokontrolerach, a ty mi podajesz jako przykład wadliwy regulator napięcia. Trochę inna kategoria. Może ci wypunktuję:

Co jest prawdopodobne:

* sprzedawanie jednej części jako innej ze zmienionymi oznaczeniami na obudowie

* sprzedawanie wadliwych części (odrzutów)

* sprzedawanie części odzyskanych ze złomowanych urządzeń

* sprzedawanie części, które były niepoprawnie magazynowane

* sprzedawanie części, która tylko emuluje oryginalną (tak jest z chipami FTDI), a poza tym jest ogólnie dostępnym chipem

* sprzedawanie części wyprodukowanych na podstawie ukradzionych lub odtworzonych masek, bez zachowania oryginalnej kontroli jakości

Co jest nieprawdopodobne:

* sprzedawanie części wyprodukowanych na podstawie ukradzionych lub odtworzonych masek, ale z jakąś modyfikacją zmieniającą charakterystyki

* sprzedawanie części wyprodukowanych na podstawie od nowa zaprojektowanych masek, ale zgodnych z datasheetem oryginalnej

Dlaczego to jest nieprawdopodobne? Bo po prostu nie ma szans, żeby było tańsze. Inwestycja jest taka, jak przy zaprojektowaniu oryginalnej części, a szanse na osiągnięcie takiej samej sprzedaży raczej marne.

Link do komentarza
Share on other sites

1-"* sprzedawanie jednej części jako innej ze zmienionymi oznaczeniami na obudowie"

2-"* sprzedawanie części, która tylko emuluje oryginalną (tak jest z chipami FTDI), a poza tym jest ogólnie dostępnym chipem"

Głównie to mam na myśli, po co produkować wadliwy chip, jak wystarczy zmienić jego sygnaturę obudowy te same ze zmianą napisów nie ma problemów, kto będzie otwierał obudowy i wydobywał obraz wewnętrznych struktur układu w detalicznej sprzedaży ..., więc jaki problem ?

Link do komentarza
Share on other sites

"* sprzedawanie części, która tylko emuluje oryginalną (tak jest z chipami FTDI), a poza tym jest ogólnie dostępnym chipem"

Głównie to mam na myśli, po co produkować wadliwy chip, jak wystarczy zmienić jego sygnaturę obudowy te same ze zmianą napisów nie ma problemów, kto będzie otwierał obudowy i wydobywał obraz wewnętrznych struktur układu w detalicznej sprzedaży ..., więc jaki problem ?

Chyba raczej to:

* sprzedawanie jednej części jako innej ze zmienionymi oznaczeniami na obudowie

ale w przypadku mikrokontrolerów tutaj problem jest z tym, że one się przedstawiają programatorowi -- czyli nie wystarczy zmienić napisów na obudowie, trzeba modyfikować maskę, a to jest bardzo drogie.

Mikrokontroler zdolny emulować taki AVR byłby na dzień dzisiejszy jednak zdecydowanie droższy od oryginału. Takie numery przechodzą z dość prostymi chipami produkowanymi przestarzałymi metodami, których cena jest sztucznie podniesiona tylko dlatego, że w Windowsie są do nich wbudowane sterowniki. W tym przypadku chip wyprodukowany współczesnymi metodami spokojnie sobie radzi z emulowaniem dość prostego protokołu i jest tańszy. Zanim będziemy mieć takie chipy dla AVR, to jeszcze trochę potrwa.

  • Lubię! 1
Link do komentarza
Share on other sites

Masz racje, ale można też napisać programy które przetestują zasoby w procesorze ...

Tylko że niedoświadczony student może z tym mieć problem i zacznie polować na czarownice.

[ Dodano: 21-06-2016, 10:32 ]

O niemożności przeprogramowania sygnatury identyfikacyjnej nie wiedziałem 🙂

Link do komentarza
Share on other sites

Jako sporadyczny gość na tym forum, proponowałbym kontynuacje tematu, pod tytułem

"Jak sprawdzić rzeczywiste zasoby używanego procesora ?"

Chodzi Ci o poprawność działania tych zasobów, czy wręcz test samej obecności?

Trzy podstawowe rzeczy to CPU, RAM i FLASH. Oprócz tego masz timery, peryferia komunikacyjne (UARTy, SPI, I2C, USB), bliki analogowe (komparatory, ADC, DAC) itd..

CPU w C przetestować trudno, bo nie jesteś w stanie zmusić kompilatora do wygenerowania ściśle określonej instrukcji lub ich sekwencji. Możesz pisać funkcje używające skomplikowanej arytmetyki, instrukcji logicznych itp i sprawdzać wyniki obliczeń, ale to wciąż będzie namiastka prawdziwych testów. Można je napisać w asemblerze testując po kilka wariantów tej samej instrukcji z kilkoma rodzajami i wartościami argumentów. Najlepiej jednak byłoby znać strukturę dekodera instrukcji, arytmometru i ścieżek danych bo nawet w skomplikowanym teście robionym na ślepo wiele miejsc (przerzutników, bramek, połączeń) może pozostać niesprawdzonymi.

Testy RAMu są chyba tak stare jak same pamięci więc tu jest do wyboru do koloru. Warto zapoznać się z literaturą i przykładowymi, podstawowymi typami testów RAMu. Jednak bez znajomości struktury fizycznej matrycy (to przewaga producenta chipu) trzeba wykonywać testy wyczerpujące które są bardzo czasochłonne. O ile a asemblerze test całej pomięci RAM jest strukturalnie trywialny, o tyle w C problemem może być panowanie nad jej niejawnym wykorzystaniem w trakcie działania programu. Gdyby jednak napisać wszystko jako jeden duży main niewywołujący żadnych funkcji (czyli nieużywający stosu) oraz wszystkie zmienne dać z atrybutem register (czyli nieużywający obszaru danych) to jest szansa upchnięcia tego i wykonania w jednym strzale. Sama rozbiegówka C co prawda inicjalizuje obszar zmiennych i woła main jako funkcję (z zapisem adresu na stosie), ale są to wyłącznie zapisy nie bazujące na konkretnej zawartości pamięci. Nawet jeśli jej nie będzie w ogóle, sterowanie do main dotrze. Obszar rejestrów można przetestować wpisując swoją funkcję (asemblerową) w jedną z początkowych sekcji rozbiegówki.

FLASH -jeśli miałby być sprawdzony cały trzeba testować go na dwa razy, żeby program nie zniszczył własnego kodu. Najprościej zrobić to chyba jednak przy pomocy zewnętrznego programatora, zapisując i weryfikując cały obszar przy pomocy spreparowanych wcześniej plików z wzorcami.

Na marginesie: Tak naprawdę do szczegółowego testowania chipów służy (i od zawsze był do tego przeznaczony) JTAG. Warto o tym poczytać, nie będę tu się nad tym rozpisywał. My z niego korzystamy praktycznie tylko do programowania pamięci, ale ten interfejs ma bardzo "bogate doświadczenia" w testowaniu scalaków i całych pakietów. Za pomocą niego można ustawiać stany przerzutników wewnętrznych niedostępnych programowo, podczytywać stany magistral, testować RAM itd itp. Niestety od polityki producenta zależy czy i w jakim stopniu udostępnia dokumentację do swojej implementacji JTAGa. Robiłem testery pakietów które bazowały na JTAGu i dzięki włączeniu w łańcuch (boundary scan - ścieżka brzegowa) większości chipów na płytce, mogłem bez napisania jednej linii kodu testować bardzo egzotyczne procesory, pamięci i układy peryferyjne wraz z połączeniami między nimi.

Link do komentarza
Share on other sites

No dobra, tym przetestujesz czy działa. Ale tak samo będzie działało na emulowanym chipie, jeśli tylko emulacja jest na tyle dokładna. Jak wykryć emulację? Do głowy przychodzi sprawdzanie czasów wykonań poszczególnych operacji -- dość trudno to zachować przy emulacji, choć oczywiście z odpowiednio dużymi zasobami wszystko jest możliwe. Coś jeszcze?

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.