Emulacja wbudowanych systemów Linux za pomocą QEMU

Emulacja wbudowanych systemów Linux za pomocą QEMU

 

1. Wstęp

Tworzenie oprogramowania osadzonego opiera się na wbudowanych urządzeniach sprzętowych, takich jak płyty rozwojowe, urządzenia modułów zewnętrznych itp., ale jeśli debugowanie nie ma nic wspólnego z urządzeniami peryferyjnymi, tylko debugowanie jądra może być symulowane przy użyciu QEMU bez kupowania sprzętu.

Jest dostępny dla hostów Linux i Windows oraz emulowanych celów PowerPC, ARM, MIPS i SPARC. QEMU przyjmuje podejście polegające na zapewnieniu minimalnej warstwy translacji między procesorem hosta a procesorem docelowym. Emulator jest uruchamiany na procesorze hosta, a emulowany jest procesor docelowy.

Poniżej znajduje się szczegółowe wprowadzenie do procesu tworzenia środowiska programistycznego QEMU.

 

2. Środowisko

2.1 Używane środowisko

* Ubuntu-18.04.1

LUB:

* Komputer: Windows10

* Maszyna wirtualna: VirtualBox-5.18

* Wirtualny system operacyjny:Ubuntu-18.04.1

* Symulowana tablica rozwojowa: vexpres

2.2 Narzędzia używane podczas konfigurowania środowiska

* qemu-4.2.0

* linux-4.14.172 (Jądro Linuksa)

* u-boot-2017.05

* zajęta skrzynka-1.31.1

* ramię-linux-gnueabi-gcc

Umieść wszystkie powiązane pliki w /home/joe/qemu

3. Zainstaluj narzędzia do kompilacji krzyżowej

# Sudo apt install gcc-arm-linux-gnueabi

 

Sprawdź, czy instalacja się powiodła

$ arm-linux-gnueabi-gcc -v

Korzystanie z wbudowanych specyfikacji.

COLLECT_GCC=arm-linux-gnueabi-gcc

COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/arm-linux-gnueabi/7/lto-wrapper

Cel: ramię-linux-gnueabi

Skonfigurowany z: ../src/configure -v –with-pkgversion='Ubuntu/Linaro 7.5.0-3ubuntu1~18.04′–with-bugurl=file:///usr

Model wątku: posix

Wersja gcc 7.5.0 (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04)

 

4. Skonfiguruj i skompiluj jądro Linux

4.1 Pobierz jądro Linuksa

Pobierz wymaganą wersję jądra ze strony www.kernel.org.

Tutaj pobieram stosunkowo najnowszą, długoterminowo wspieraną wersję jądra linux-4.4.157

wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.4.157.tar.xz  do katalogu /qemu

4.2 Rozpakuj jądro Linux

# tar xvJf linux-4.4.157.tar.xz

4.3 Kompilowanie jądra Linux

// Wprowadź katalog plików źródłowych jądra

# płyta CD Linux-4.4.157

make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm vexpress_defconfig

make CROSS_COMPILE=arm-linux-gnueabi-ARCH=arm menuconfig

Jeśli uruchomienie menuconfig pokazuje, że brakuje pakietu ncurses, po prostu uruchom następujące polecenie, aby go zainstalować)

$ sudo apt-get zainstaluj libncurses5-dev

Wejdź do konfiguracji menu i dokonaj następujących ustawień

Kompiluj z cross toolchain

Po udanej kompilacji wygeneruj plik obrazu jądra w katalogu

arch/arm/boot, zImage i dtb można skopiować do osobnego folderu w celu wygodnego użycia

 

5. Zainstaluj narzędzia QEMU

5.1 Zainstaluj QEMU

* wget https://download.qemu.org/qemu-4.2.0.tar.xz

* tar xvJf qemu-4.2.0.tar.xz

* płyta CD qemu-4.2.0

5.2 Zainstaluj zależne pakiety przed konfiguracją QEMU

# apt zainstaluj zlib1g-dev
# apt install libglib2.0-0 libglib2.0-dev
# apt zainstaluj libsdl1.2-dev
# apt install libpixman-1-dev libfdt-dev

Aby zapobiec bałaganowi w plikach po kompilacji, utwórz katalog konstruktora jako pośrednią ścieżkę docelową do kompilacji.

Skonfiguruj, skompiluj i zainstaluj QEMU.

5.3 Skonfiguruj QEMU do obsługi wszystkich płyt w architekturze ramienia

# ../configure –target-list=arm-softmmu –audio-drv-list=

Jeśli brakuje pixmana, gdy pojawi się następujący monit,

użyj sudo apt-get install libpixman-1-dev, aby go zainstalować.

5.4 Zobacz wersję QEMU

5.5 Wyświetl tablice rozwojowe obsługiwane przez QEMU

5.6 Uruchom QEMU

# qemu-system-arm -M vexpress-a9 -m 512M -kernel ./zImage -dtb ./vexpress-v2p-ca9.dtb -nographic -append „console=ttyAMA0”

LUB:

$pwd

/home/joe/qemu

# qemu-system-arm -M vexpress-a9 -m 512M -kernel linux-.4.157/arch/arm/boot/zImage -dtb linux-4.4.157/arch/arm/boot/dts/vexpress-v2p-ca9. dtb -nographic -append „console=ttyAMA0”

Aby lepiej testować i uruchamiać qemu, możesz utworzyć skrypt startowy start.sh i nadać skryptowi uprawnienia do uruchamiania chmod +x start.sh

 

#! / bin / bash

 

ramię-systemu qemu \

-M vexpress-a9 \

-m 512M \

-kernel /home/joe/jemu/linux-4.4.157/arch/arm/boot/zImage \

-dtb /home/joe/jemu/linux-4.4.157/arch/arm/boot/dts/vexpress-v2p-ca9.dtb \

-nograficzny \

-dołącz „konsola=ttyAMA0”

 

6. Stwórz główny system plików

Użyj busybox do stworzenia prostego głównego systemu plików.

6.1 Pobierz narzędzie busybox

Pobierz busybox z https://busybox.net/downloads/

# wget https://busybox.net/downloads/busybox-1.31.1.tar.bz2

# tar xjvf busybox-1.31.1.tar.bz2

# cd busybox-1.31.1

# zrobić defconfig

# make CROSS_COMPILE=arm-linux-gnueabi-

# make install CROSS_COMPILE=arm-linux-gnueabi-

Wyświetlone zostaną następujące informacje, wskazujące, że instalacja się powiodła.

Po zakończeniu instalacji wygenerowany plik docelowy domyślnie znajduje się w katalogu ./_install.

 

6.2 Generowanie głównego systemu plików

6.2.1 skompiluj i zainstaluj busybox

#mkdir rootfs

# sudo cp -r _install/* rootfs/

6.2.2 Dodaj bibliotekę glibc, dodaj loader i bibliotekę dynamiczną w głównym systemie plików

# sudo cp -r _install/* rootfs/

# Sudo cp -p /usr/arm-linux-gnueabi/lib/* rootfs/lib/

6.2.3 Utwórz 4 urządzenia terminalowe tty (c oznacza urządzenie znakowe, 4 to główny numer urządzenia, a 1~4 to odpowiednio podrzędne numery urządzeń)

 

6.3 Utwórz obraz systemu plików na karcie SD

6.3.1 Wygeneruj pusty obraz karty SD

# dd if=/dev/zero of=rootfs.ext3 bs=1M liczba=32

6.3.2 Sformatuj kartę SD jako system plików exts

# mkfs.ext3 rootfs.ext3

6.3.3 Nagrywanie rootfów na kartę SD

# sudo mount -t ext3 rootfs.ext3 /mnt -o pętla

# sudo cp -rf rootfs/* /mnt/

# sudo umount /mnt

 

7. Zweryfikuj

7.1 Uruchom Qemu

Uruchom następujące polecenie, aby przetestować, sprawdź, czy skompilowane jądro może działać pomyślnie

# sudo qemu-system-arm -M vexpress-a9 -m 512M -kernel ~/qemu/zImage –dtb ~/qemu/vexpress-v2p-ca9.dtb -nographic -append „console=ttyAMA0”

Lub za pomocą skryptu:

 

W powyższym teście jądro zgłosi panikę, co sugeruje, że brakuje nam głównego systemu plików.

Powyższy problem wynika z narzędzia busybox generowanego w środowisku x86.

Użyliśmy make install podczas instalacji busyboxa, więc powinieneś użyć

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-install

 

Narzędzie do kompilacji generuje narzędzie busybox używane przez platformę ramienia

# plik rootfs/bin/busybox

rootfs/bin/busybox: 32-bitowy plik wykonywalny ELF LSB, ARM, EABI5 wersja 1 (SYSV), łączony dynamicznie, interpreter /lib/ld-, dla GNU/Linux 3.2.0, BuildID[sha1]=cbcd33b8d6c946cb19408a5e8e714de554c87f52, striped

 

7.2 Zweryfikuj ponownie

Teraz Qemu uruchomiło jądro Linux i pomyślnie zamontowało system plików, a także może komunikować się z systemem za pomocą prostych funkcji za pośrednictwem terminala szeregowego. Problem polegający na tym, że nie można uruchomić /etc/init.d/rcS w procesie drukowania, wystarczy dodać plik /etc/init.d/rcS. Zawartość pliku może być szybkim stwierdzeniem.

 

7.3 Wyjście z QEMU

Dwa sposoby na wyjście z qemu

* W innym wejściu terminala: zabij wszystkie qemu-system-arm

* W danych wejściowych Qemu: Ctrl+A; x

QEMU: rozwiązany

 

8. Uruchom jądro Linuksa przez u-boot

System wbudowany zazwyczaj obejmuje: u-boot, kernel, rootfs i appfs. Zależność pozycyjna tych części na płytce rozwojowej ARM pokazano na poniższym rysunku

 

Program rozruchowy Parametry rozruchu Jądro Korzenie Aplikacje

 

Rootfs może działać na płycie lub komputerze

 

8.1 Przygotuj U-boot

8.1.1 Pobierz u-boot

http://ftp.denx.de/pub/u-boot/, używamy: u-boot-2021.01.tar.bz2

# tar -jxvf u-boot-2018.09.tar.bz2

8.1.2 Skompiluj u-boot

# vim Plik Makefile

CROSS_COMPILE = ramię-linux-gnueabi-

# vim config.mk

ŁUK = ramię

# make vexpress_ca9x4_defconfig, błąd

Potrzebujesz: sudo apt zainstaluj bizon

sudo apt zainstaluj flex

wtedy: # make -j4 error

Potrzebujesz: eksportuj CROSS_COMPILE=arm-linux-gnueabi-

eksportuj ARCH=ramię

ponownie: # make vexpress_ca9x4_defconfig

# make -j4

 

 8.1.3 Test, uruchom u-boot

$ sudo qemu-system-arm -M vexpress-a9 -m 512M -kernel u-boot-2021.01/u-boot –nograficzny

 

8.2 Kompilacja konfiguracji jądra

Użyj u-boot, aby uruchomić obraz jądra:

Musisz skompilować jądro do formatu uImage,

Musisz określić adres ładowania uImage w pamięci

Określ podczas kompilacji jądra: make LOADADDR=? uObraz -j4

 

# cd /home/joe/qemu/linux-4.4.157

# make LOADADDR=0x60003000 uImage -j4

 

Po zakończeniu kompilacji u-boot, plik mkimage zostanie wygenerowany w folderze narzędzi, skopiuj ten plik do folderu bin w katalogu kompilatora krzyżowego.

$cd qemu/linux-4.4.157

błąd:

$ sudo apt zainstaluj narzędzia u-boot

Pobierz uImage

9. Ustawienia funkcji sieciowych QEMU

Gdy maszyna wirtualna Qemu uruchamia się przy u-boot, uImage musi zostać załadowany do pamięci, a uImage można pobrać na określony adres w pamięci przez serwer TFTP.

9.1 Sprawdź, czy jądro hosta obsługuje moduł tun/tap

// Zainstaluj dwa narzędzia, od których zależy sieć zmostkowana

# Sudo apt install uml-utilities Bridge-utils

Utwórz plik urządzenia tun: /dev/net/tun (zwykle tworzony automatycznie)

Zmodyfikuj /etc/network/interfaces (skonfiguruj sieć, uruchom ponownie, aby odniosło skutek)

# sudo vim /etc/sieć/interfejsy

auto loiface lo inet loopbackauto enp0s3 // nazwa wirtualnej karty sieciowejauto br0iface br0 inet dhcpbridge_ports enp0s3

 

NIGDY nie uruchamia się ponownie

# restart

Następnie sprawdź środowisko sieciowe Qemu

Port sieci wirtualnej br0 to port sieciowy do komunikacji między maszyną wirtualną Qemu a hostem Linux.

 

10. Zainstaluj serwer TFTP

Utwórz serwer TFTP, aby pobrać uImage do pamięci podczas uruchamiania uImage dla płyty rozwojowej symulacji Qemu

 

10.1 Zainstaluj narzędzie tftp

 

$ apt-get install tftp-hpa tftpd-hpa xinetd

 

10.2 Zmodyfikuj plik konfiguracyjny i ustaw katalog serwera TFTP

# Sudo vim /etc/default/tftpd-hpa

......

TFTP_DIRECTORY="/home/joe/tftpboot"

......

10.3 Utwórz katalog tftp na hoście Linux

# mkdir /home/joe/tftpboot

# chmod 777 /home/joe/tftpboot

 

10.4 Uruchom ponownie usługę tftp

# restart sudo /etc/init.d/tftpd-hpa

 

10.5 Ustaw parametry startowe jądra w u-boot

skopiuj uImage i cexpress-v2p-ca9.dtb do tftpboot

Uruchom Qemu, aby zweryfikować

 

$ sudo qemu-system-arm -M vexpress-a9 -m 512M -kernel u-boot-2021.01/u-boot –nographic -net nic,vlan=0 -net tap,vlan=0,ifname=tap0 -sd rootfs. wew3

 

Teraz katalog rootfs jest prostym systemem plików root, który można przekształcić w plik lustrzany, a plik lustrzany można nagrać na płytę rozwojową lub jądro Linuksa można uruchomić przez u-boot w Qemu i zamontować na plik lustrzany. Można go również ustawić na uruchamianie za pośrednictwem sieciowego systemu plików NFS.

 

11. Zamontuj system plików NFS

11.1 Zainstaluj i skonfiguruj usługę NFS

NIGDY nie instaluj

$ sudo apt zainstaluj serwer jądra nfs

 

11.1.2 Konfiguracja

$ Sudo mkdir /home/joe/qemu/rootfs

$ sudo chown none:nogroup /home/joe/qemu/rootfs

$ sudo chmod 777 /home/joe/qemu/rootfs

$ sudo nano /etc/eksport

Dodaj: /home/joe/qemu/rootfs *(rw,sync,no_root_squash)

 

Zrestartuj serwer nfs:

$ sudo /etc/init.d/nfs-kernel-server restart

Lub: $systemctl restart nfs-kernel-server

 

Sprawdź, czy został utworzony katalog współdzielony NFS

$ sudo showmount –e

Podczas korzystania z sieciowego systemu plików NFS host systemu Linux musi zamknąć zaporę systemową, w przeciwnym razie podczas działania systemu wystąpią nieprawidłowości.

 

Wnioski

Mam nadzieję, że dzięki temu blogowi dowiesz się więcej o QEMU. Wszystkie przedstawione powyżej techniki zostały użyte w różnych zgłoszeniach do naszego programu. Nie ma jednego, stałego sposobu emulowania z QEMU. Poznaj różne techniki i zobacz, co działa dla Ciebie. Zapoznaj się z tą wiedzą, a zdziwisz się, jak może Ci pomóc w nieoczekiwany sposób.

Wprowadzenie Lichee Pi

Wprowadzenie Lichee Pi

LicheePi to delikatny, jednopłytkowy komputer, działający na popularnej w ostatnich latach taniej platformie Allwinner V3S. Może być używany przez początkujących do nauki Linuksa lub do rozwoju produktu. oferuje bogactwo urządzeń peryferyjnych (LCD, ETH, UART, SPI, I2C, PWM, SDIO…) i potężną wydajność.

 

       

        Lichee Zero Lichee Nano

 

 

 

       

                                 Lichee Pi Zero Lichee Pi Nano 

 

 

Korzyści

LICHEE PI ZERO

LICHEE PI NANO

SoC Zwycięzca V3S Zwycięzca F1C100S
CPU ARM Cortex-A7 ARM9
Częst. 1.2GHz 408MHz
RAM 64MB DDR2 32MB DDR2
Magazynowanie SPI Flash/Micro-SD SPI Flash/Micro-SD

Wyświetlacz

 

* Uniwersalny 40P RGB LCD FPC:

* Obsługiwane rozdzielczości: 272×480, 480×800,1024×600

* Wbudowany układ RTP, obsługuje ekran dotykowy

* Uniwersalny 40P RGB LCD FPC:

* Obsługiwane rozdzielczości: 272×480, 480×800,1024×600

* Wbudowany układ RTP, obsługuje ekran dotykowy

Interfejs

 

*SDIOx2
* SPIx1
* I2Cx2
* UARTx3
* 100 M eteru x1 (w tym EPHY)
* USB OTG x1
* MIPI CSI x1
*PWMx2
* LRADC x1
* Głośnik x2 + mikrofon x1
*SDIOx1
* SPIx2
* TWIX x3
*UART x3
* USB OTG x1
* Wyjście TV* PWM x2
* LRADC x1
* Głośnik x2 + mikrofon x1

Informacje elektryczne

 

Micro USB 5V, piny 2.54mm Zasilanie 3.3V~5V; Zasilacz z otworem stemplowym 1.27 mm.

1GHz linux IDLE bieg 90 ~ 100mA; praca przy spalaniu procesora ~180mA

Temperatura przechowywania -40~125

Temperatura pracy -20~70

Micro USB 5V, piny 2.54mm Zasilanie 3.3V~5V; Zasilacz z otworem stemplowym 1.27 mm.

408MHz linux IDLE bieg 90 ~ 54mA; przy prądzie roboczym ekranu ~250mA

Temperatura przechowywania -40~125

Temperatura pracy -20~70

 

Temperatura podczas wykonywania testu warunków skrajnych w Linuksie jest tylko nieznacznie wyższa niż temperatura ciała.

 

Lichee Pi obsługuje wiele systemów operacyjnych, takich jak: Linux, RT-Tread, Xboot lub brak systemu operacyjnego.

Podobnie jak większość MCU, Lichee Pi może łączyć się z kilkoma interfejsami o niskiej prędkości, takimi jak GPIO, UART, PWM, ADC, I2C, SPI i innymi. Co więcej, może obsługiwać inne szybkie urządzenia peryferyjne, takie jak RGB LCD, EPHY, MIPI CSI, OTG USB i inne. Lichee Pi ma zintegrowany kodek, który umożliwia bezpośrednie podłączenie do słuchawek lub mikrofonu.

 

Złącze wyświetlacza:

Uniwersalny 40P LCD jest wyposażony w podświetlenie led i czteroprzewodowe linie, dotyk z oporem elektrycznym, który jest bardzo odpowiedni do wyświetlania i interakcji. A13 obsługuje również czteroprzewodową funkcję dotykową rezystancji, może przeprowadzać dwupunktowe wykrywanie dotyku.

 

Ten interfejs jest kompatybilny z interfejsem WYŚWIETLACZ ORIENTALNY produktów.

 

RGB na VGA:

 

RGB na HDMI:

 

RGB do GPIO:

 

RGB do DVP CSI:

 

Link Lichee Pi:

http://dl.sipeed.com/
Wiki: maixpy.sipeed.com
Blog: blog.sipeed.com
Grupa telegramów: https://t.me/sipeed

Wprowadzenie do projektu osadzonego wyświetlania orientacji

Wprowadzenie do projektu osadzonego wyświetlania orientacji

Wyświetlacz Orient jest jednym z wiodących wyświetlaczy na świecie Producenci wyświetlaczy LCD która została założona w 1996 roku przez kadrę kierowniczą z ponad 25-letnim doświadczeniem badawczo-rozwojowym i produkcyjnym. Oprócz wyświetlania, Orient Display skupił się również na technologiach wbudowanych, które obejmują architekturę ARM i zgromadził bogate doświadczenie w produktach wbudowanych.

Obecnie usługi techniczne Orient Display obejmują sprzęt, oprogramowanie i doradztwo.

 

Autonomiczne Zespół sprzętu wykonać prototypy w jak najkrótszym czasie zgodnie z Twoimi pomysłami i wymaganiami projektowymi. Specjalizujemy się w projektowaniu opłacalnych lub złożonych płyt o wysokiej wydajności, aby spełnić Twoje wymagania dotyczące wysokiej niezawodności w krótkim cyklu rozwojowym.

– Schemat Projektu

– Układ PCB

– Dostosowanie produktów branżowych

 

Autonomiczne Zespół oprogramowania specjalizuje się w systemach linuksowych Projekty ARM®PowerPC i procesor x86, żeby wymienić tylko kilka. Jako dostawca kompletnych rozwiązań dla systemów Linux, Android i WinCE w systemach wbudowanych, możemy rozwiązać kompleksowe problemy związane z systemami Twoich produktów.

– Migracja systemów, optymalizacja i dostosowywanie

– Napędzaj rozwój

– Krawiectwo jądra

– Przenoszenie LINUX KERNEL na płytę ARM, PPC lub x86

– Rozwój aplikacji (aplikacja, Linux QT, Linux C/++)

 

Autonomiczne FAE zespół zapewniamy również pełną gamę technologii dla Twoich produktów lub półproduktów.

– Zapewniamy konsultacje w zakresie zasobów oprogramowania i sprzętu naszych produktów;

– Rozwiązujemy problemy napotkane podczas użytkowania instrukcji obsługi oprogramowania i sprzętu naszych produktów;

– wsparcie techniczne posprzedażowe OEM i ODM;

– Utrzymanie i aktualizacja danych;

– Produkty Orient Display są wspierane przez nasze Gwarancja najniższej ceny.

 

Sekwencja rozwoju

 

1. Analiza wymagań systemowych

* Zadania projektowe, cele, specyfikacje

– To zapewnione przez naszych klientów

* Wymagania funkcjonalne i niefunkcjonalne

– Uwzględnij wydajność systemu, koszt, zużycie energii, objętość, wagę i inne czynniki

 

2. Projektowanie architektury

Dobra architektura to klucz do sukcesu projektu. Na tym etapie często konieczne jest wykonanie następujących czynności:

  • Wybierz główny chip:

— ARM Cortex A, R lub M lub PowerPc lub ColdFire

  • Określ RTOS:

— Linux, uClinux, Vxworks, freeRTOS, WinCE

  • Wybierz wyświetlacz:

- Panel TFT, TFT czytelny w słońcu, Panele szklane LCD, Graficzny wyświetlacz LCD,  Wyświetlacz OLED, Panele dotykowe, Wbudowany wyświetlacz LCD or Wykonany na zamówienie wyświetlacz by Zorientuj wyświetlacz

  • Język programowania:

— C/C++, Python, Java

  • Narzędzia programistyczne:

u-boot, busybox, QT, Ubuntu, stm32CubeIde, studio wizualne, studio Android, keil uVision, studio RT-Tread

 

3. Współprojektowanie sprzętu i oprogramowania

W celu skrócenia cyklu rozwoju produktu:

Sprzęt:  Zazwyczaj zaczynamy projekt od tablicy ewaluacyjnej, takiej jak wyświetlacz orient AIY-A002M, AIY-A003M i AIY-A005M. później dostosujesz tablicę do projektu, odrzuć części, które nie są potrzebne.

Sekwencja rozwoju oprogramowania:

  • Zwykle wybieramy u-boot jako Bootloader, to 1) init cpu do znanego stanu 2) init pamięć 3) init przerwanie 4) init clock 5) ładuje jądro do bieżącego adresu
  • Skonfiguruj jądro:

1) skonfiguruj system jądra: *zarządzanie pamięcią, *systemy plików, *sterownik urządzenia, *stos sieciowy, *systemy we/wy

2) zapis sterownika urządzenia we/wy *sterownik urządzenia char, *sterownik urządzenia blokowego, *sterownik urządzenia sieciowego

  • Wybierz aplikacje:

*Wybierz bibliotekę użytkownika *Buduj aplikację użytkownika *Konfiguruj proces inicjalizacji *Buduj root FS

 

4. SIntegracja z systemem

Zintegruj oprogramowanie, sprzęt i urządzenia wykonawcze systemu, debuguj, wyszukuj i poprawiaj błędy w procesie projektowania jednostki.

 

5. Test systemu

Przetestuj zaprojektowany system, aby sprawdzić, czy spełnia wymagania funkcjonalne podane w specyfikacji. Największą cechą modelu rozwoju systemu wbudowanego jest wszechstronny rozwój oprogramowania i sprzętu.

 

Wnioski w

Orient Display posiada niesamowity zespół utalentowanych ekspertów z doświadczeniem i możliwościami tworzenia wbudowanego modułu wyświetlacza od koncepcji po produkcję.

W razie jakichkolwiek pytań prosimy o kontakt z naszymi inżynierami pod adresem: tech@orientdisplay.com.

Jak wybrać procesory ARM

Jak wybrać procesory ARM

Wprowadzenie

Najszerszy zakres mikroprocesor rdzenie dla prawie wszystkich rynków aplikacji. Badać ARM. Wymagania dotyczące wydajności, mocy i kosztów dla prawie wszystkich rynków aplikacji, procesory mają kluczowe znaczenie. Wydajność systemu zależy w dużej mierze od jego sprzętu; ten artykuł poprowadzi Cię przez badanie procesora ARM i będzie bardzo pomocny w podejmowaniu decyzji.

 

Krótkie wprowadzenie do ARM

Rysunek 1. Mapa drogowa procesorów ARM

 

Przed 2003 r. istnieją klasyczne procesory ARM, w tym ARM7 (architektura ARMv4), ARM9 (architektura ARMv5), ARM11 (architektura ARMv6). ARM7 nie ma MMU (jednostki zarządzania pamięcią), nie może obsługiwać wieloprocesowych systemów wieloużytkownikowych, takich jak Linux i WinCE. Można uruchomić tylko systemy takie jak ucOS i ucLinux, które nie wymagają MMU. ARM9 i ARM11 to wbudowane procesory z MMU, które mogą działać pod Linuksem.

Po 2003 roku, jeśli chodzi o architekturę ARMv7, nazwano ją na cześć Cortexa i podzielono na trzy serie: Cortex-A, Cortex-R i Cortex-M.

  • Cortex-A — rdzenie procesorów aplikacyjnych dla systemów wymagających dużej wydajności
  • Kora-R – wysokowydajne rdzenie do aplikacji czasu rzeczywistego
  • Cortex-M – rdzenie mikrokontrolerów do szerokiej gamy aplikacji wbudowanych

Po prostu, Cortex-A Seria jest odpowiednia dla aplikacji, które mają wysokie wymagania obliczeniowe, obsługują bogate systemy operacyjne oraz zapewniają interaktywne multimedia i grafikę. Kora-R nadają się do tego, które wymagają niezawodności, wysokiej dostępności, odporności na awarie, łatwości konserwacji i reakcji w czasie rzeczywistym. Cortex-M serie są przeznaczone dla mikrokontrolerów i aplikacji końcowych wrażliwych na koszty i moc.

 

Cortex-A kontra Cortex-R kontra Cortex-M

Cortex-A

Kategoria procesorów Cortex-A dedykowana jest urządzeniom z systemem Linux i Android. Dowolne urządzenia – począwszy od smartwatchy i tabletów, a skończywszy na sprzęcie sieciowym – mogą być obsługiwane przez procesory Cortex-A.

  • Procesory Cortex-A (A5, A7, A8, A9, A12, A15 i A17) oparte są na architekturze ARMv7-A
  • Zestaw typowych funkcji dla procesorów A obejmuje silnik przetwarzania mediów (NEON), narzędzie do celów bezpieczeństwa (Trustzone) i różne obsługiwane zestawy instrukcji (ARM, Thumb, DSP itp.)
  • Główne cechy procesorów Cortex-A to najwyższa wydajność i znakomita energooszczędność, które są ściśle powiązane, aby zapewnić użytkownikom najlepszą możliwą obsługę

Główne cechy procesora Cortex-A:

Cortex-A5: Cortex A5 jest najmniejszym i najniższym elementem z serii Cortex A, ale nadal może wykazywać wydajność wielordzeniową, jest kompatybilny z procesorami A9 i A15.

Cortex-A7: Pobór mocy A7 jest prawie taki sam jak A5, ale wydajność zapewniana przez A7 jest o 20% wyższa niż A5, a także pełna zgodność architektoniczna z Cortex-A15 i Cortex-A17. Cortex-A7 to idealny wybór do oszczędnych wdrożeń smartfonów i tabletów.

Contrex-A15: Cortex-A15 jest członkiem tej serii o najwyższej wydajności, zapewniając dwukrotnie wyższą wydajność niż A9. A15 znajduje zastosowanie w urządzeniach wysokiej klasy, serwerach o niskim poborze mocy i infrastrukturze bezprzewodowej. Jest to pierwsza obsługa procesorów w rozwiązaniach do zarządzania danymi i środowiskami wirtualnymi.

Contrex-A17: Cortex-A17 wykazuje o 60% wyższą wydajność niż A9. Głównym celem jest zaspokojenie potrzeb urządzeń klasy premium.

Contrex-A50: Contrex-A50, najnowsza seria, jest zbudowana na architekturze ARMv8 i zapewnia obsługę Arch64-bitowego systemu energooszczędnego. Oczywistym powodem przejścia na 64-bit jest obsługa ponad 4 GB pamięci fizycznej, co zostało już osiągnięte w Cortex-A15 i Cortex-A7.

 

Kora-R

Procesory Cortex-R są przeznaczone do wysokowydajnych aplikacji czasu rzeczywistego, takich jak kontrolery dysków twardych, odtwarzacze multimedialne sprzętu sieciowego i inne podobne urządzenia. Ponadto są również doskonałym wsparciem dla przemysłu motoryzacyjnego, takiego jak poduszki powietrzne, układy hamulcowe i zarządzanie silnikiem.

Kora-R4:  Cortex-R4 doskonale nadaje się do zastosowań motoryzacyjnych. Może być taktowany do 600 MHz, ma 8-stopniowy potok z podwójnym systemem przerwań, pre-fetch i niskim opóźnieniem, co czyni go idealnym rozwiązaniem dla systemów o krytycznym znaczeniu dla bezpieczeństwa.

Kora-R5: Cortex-R5 rozszerza funkcje oferowane przez R4 i dodaje zwiększoną wydajność, niezawodność oraz usprawnia zarządzanie błędami. Implementacja dwurdzeniowa umożliwia budowanie bardzo wydajnych, elastycznych systemów z odpowiedziami w czasie rzeczywistym.

Kora-R7: Cortex-R7 znacznie zwiększa wydajność. Oferują one 11-stopniowy potok i umożliwiają zarówno wykonanie poza kolejnością, jak i przewidywanie rozgałęzień na wysokim poziomie. Narzędzia mogą być zaimplementowane dla wieloprocesorowego typu lock-step, symetrycznego i asymetrycznego. Ogólny kontroler przerwań to kolejna istotna cecha, o której należy wspomnieć.

 

Cortex-M

Cortex-M zaprojektowany specjalnie z myślą o rynku MCU. Seria Cortex-M jest zbudowana na architekturze ARMv7-M (używanej dla Cortex-M3 i Cortex-M4), a mniejszy Cortex-M0+ jest zbudowany na architekturze ARMv6-M. Można śmiało powiedzieć, że Cortex-M stał się dla świata 32-bitowego tym, czym 8051 jest dla 8-bitowego – standardowym rdzeniem branżowym dostarczanym przez wielu dostawców. Serię Cortex-M można zaimplementować na przykład jako miękki rdzeń w FPGA, ale znacznie częściej spotyka się je zaimplementowane jako MCU ze zintegrowanymi pamięciami, zegarami i urządzeniami peryferyjnymi. Niektóre są zoptymalizowane pod kątem efektywności energetycznej, inne pod kątem wysokiej wydajności, a niektóre są dostosowane do konkretnego segmentu rynku, takiego jak inteligentne pomiary

W przypadku aplikacji, które są szczególnie wrażliwe na koszty lub migrują z wersji 8-bitowej na 32-bitową, najlepszym wyborem może być najmniejszy element z serii Cortex-M.

Kora-M0: Cortex-M0+ używa zestawu instrukcji Thumb-2 i ma dwustopniowy potok. Istotnymi cechami są magistrala dla jednocyklowego GPIO i bufor mikrośledzenia.

Cortex-M3&M4:  Cortex-M3 i Cortex-M4 to bardzo podobne rdzenie. Każda z nich oferuje 3-stopniowy potok, wiele 32-bitowych magistral, taktowanie do 200 MHz i bardzo wydajne opcje debugowania. Istotną różnicą jest zdolność rdzenia Cortex-M4 do DSP. Cortex-M3 i Cortex-M4 mają tę samą architekturę i zestaw instrukcji (Thumb-2). Jeśli twoja aplikacja wymaga matematyki zmiennoprzecinkowej, zrobisz to znacznie szybciej na Cortex-M4 niż na Cortex-M3. To powiedziawszy, w przypadku aplikacji, która nie korzysta z możliwości DSP lub FPU Cortex-M4, zobaczysz ten sam poziom wydajności i zużycia energii na Cortex-M3. Innymi słowy, jeśli potrzebujesz funkcji DSP, wybierz Cortex-M4. W przeciwnym razie Cortex-M3 wykona zadanie.

 

Wnioski

Rysunek 2. Przegląd Cortex

 

Procesory ARM oferują różnorodne możliwości do różnych celów. Przy odrobinie przemyśleń i badań będziesz w stanie znaleźć odpowiedni procesor, który odpowiada potrzebom Twojej aplikacji. niezależnie od tego, czy chodzi o wysokiej klasy tablet, czy o bardzo tani bezprzewodowy węzeł czujnikowy.

Wyzwaniem jest dokonanie właściwego wyboru rdzenia Cortex i urzeczywistnienie pomysłu. Ale zespół doświadczonych profesjonalistów może zająć się wszystkimi sprawami i realizować koncepcje o dowolnej złożoności.

Orient Display od wielu lat koncentruje się na technologiach związanych z procesorami ARM i zgromadził bogate doświadczenie w opracowywaniu i wdrażaniu produktów architektury ARM. Nieustannie uruchamiając platformy programistyczne i płyty główne, które zaspokajają ogólne potrzeby rynku, uwzględnia również indywidualne potrzeby projektowe klientów. Świadcz usługi dostosowane do potrzeb.

Nasz zespół okuć może w jak najkrótszym czasie wyprodukować prototypy zgodnie z Państwa pomysłami i potrzebami projektowymi. Nasz zespół oprogramowania może pomóc w dostosowaniu wszystkich funkcji warstwy sterownika cięcia.

Kontakt a my pomożemy zrealizować Twoje plany od pomysłu do finalnego produktu.

Jak korzystać z graficznych wyświetlaczy LCD z Raspberry Pi?

Jak podłączyć graficzny wyświetlacz LCD do Raspberry PI?

Artykuł pokazuje jak podpiąć 128×64 graficzny wyświetlacz LCD do Raspberry Pi.

Zastosowany wyświetlacz LCD to 128×64 z kontrolerem LCD ST7565. Może być zasilany bezpośrednio z szyny Raspberry Pi 3.3V. Wymaga 5 pinów GPIO do przesyłania danych.

Schemat jest następujący: CS (Chip Select), RST (Reset) i A0 (Register Select) można podłączyć do dowolnych 3 pinów GPIO. W tym przykładzie 8,24 i 25 są wartościami domyślnymi. Podczas tworzenia instancji klasy Python ST7565 jako parametry można określić różne wartości. SCLK (zegar szeregowy) na GLCD przechodzi do GPIO 11, które jest zegarem szeregowym Pi. SID (Serial Input Data) na GLCD przechodzi do GPIO 10 na Pi, czyli MOSI. GPIO 10 i 11 muszą być używane dla SID i SCLK. Vdd jest podłączony do pinu 3.3V na PI i masą również są podłączone.

Wyświetlacz LCD ma podświetlenie RGB. Piny LED mogą przejść do GPIO 16,20 i 21. Aby kontrolować kolor z Pi, określając piny RGB podczas tworzenia instancji klasy ST7565. Rezystory muszą być połączone szeregowo, aby ograniczyć prąd, aby zapobiec awariom diod LED. Jasność diody można zmieniać za pomocą różnych wartości rezystorów. Najlepiej będzie ustawić prąd tak, aby wynosił około 20mA, oczywiście różne wartości będą skutkować inną mieszanką kolorów. Bardzo trudno jest wymieszać czysto biały kolor. Proszę dokładnie obliczyć wartość rezystora, przy 40mA jasność diody LED będzie z czasem gwałtownie spadać, przy prądzie zbliżonym do 60mA dioda może ulec awarii i zostać trwale uszkodzona.

Jak zaprogramować graficzny wyświetlacz LCD?

Wyświetlacz ma 128 pikseli w poziomie i 64 piksele w pionie. Wyświetlacz LCD można podzielić na 8 poziomych stron. Są ponumerowane od 3 do 0 i od 7 do 4 od góry do dołu. Każda strona zawiera 128 kolumn i 8 rzędów pikseli. Aby zaadresować piksele, określając numer strony i kolumny, i wyślij bajt, aby wypełnić jednocześnie 8 pionowych pikseli.

Wyświetlacz ma SPI (Szeregowy interfejs peryferyjny) połączyć się z Pi. SPI wymaga 3 linii MOSI, MISO i zegara. Pi jest mistrzem, a GLCD jest niewolnikiem. W tym przykładzie tylko zapis do GLCD i nie jest gotowy, więc potrzebne jest połączenie z liniami MOSI i Clock. MOSI to wyjście z Pi do GLCD, a zegar synchronizuje taktowanie.

  1. Włącz SPI na Raspberry Pi drugim
  2. Z menu raspi-config wybierz Opcje zaawansowane, a następnie SPI. Następnie wybierz Tak dla „ Czy chcesz, aby interfejs SPI był włączony”. Hit OK, uruchom ponownie. Wybierz Tak dla „domyślnie ładowany moduł jądra SPI”. Uruchom ponownie Pi po włączeniu SPI. Następnie przetestuj SPI za pomocą IsmodPowinien zwrócić SPI_bcm2708 lub spi_bcm2835 w zależności od wersji Pi. Biblioteka Pythona SPI wymaga python2.7 dev, które można zainstalować za pomocą apt-get install:
  3. Połączenia Biblioteka Pythona SPI jest nazywany py-spidev. Można go zainstalować za pomocą git:GLCD Bibliotekę Pythona dla Pi można pobrać ze strony GitHub.
  4. Główna biblioteka ST7565 (st7565.py) obsługuje rysowanie, tekst i bitmapy oraz moduł czcionek (xglcd_font.py) do ładowania czcionek X-GLCD. Oto podstawowe polecenia rysowania służące do tworzenia punktów, linii, prostokątów, okręgów, elips i regularnych wielokątów: Aby uzyskać więcej informacji, zapoznaj się z poniższym odnośnikiem lub skontaktuj się z naszymi inżynierami.

Rozpoczęcie pracy z projektami opartymi na płycie STM32G071RB przy użyciu STM32CubeIDE

Rozpoczęcie pracy z projektami opartymi na płycie STM32G071RB przy użyciu STM32CubeIDE

Sprawdź nasze Tablica sterowania!

Rozpoczęcie pracy z 32-bitowym mikrokontrolerem opartym na architekturze ARM jest zawsze trochę zniechęcające. Dostępnych jest zbyt wiele mikrokontrolerów, platform, płyt rozwojowych, narzędzi i oprogramowania. Ta notatka opisuje krok po kroku, jak rozpocząć projekt LED.

Pierwsze kroki: o płytce rozwojowej STM32G071RB

Cechy:

  • Rdzeń: Arm® 32-bitowy procesor Cortex®-M0+, częstotliwość do 64 MHz
  • Do 128 KB pamięci Flash, 36 KB SRAM
  • 7-kanałowy kontroler DMA z elastycznym mapowaniem
  • 12-bitowy, 0.4 µs ADC (do 16 kanałów zewnętrznych)
  • Dwa 12-bitowe przetworniki cyfrowo-analogowe, próbkowanie i przytrzymywanie o małej mocy
  • Dwa I2C, cztery USART, jeden UART małej mocy, dwa SPI

 

Pierwsze kroki: Zainstaluj STM32CubeIDE

Można pobrać STM32CubeIDE z ich st.com. Jest wolne. Zainstaluj następujące STM32CubeIDE Instrukcja instalacji STM32CubeIDE.

 

Twój pierwszy projekt: miga dioda LED

Zanim zaczniemy pisać kod, musimy stworzyć projekt. Jest to podobne do większości innych środowisk IDE — projekty służą do łączenia wszystkich ustawień, kodu i definicji w jedną kolekcję zarządzaną z tej samej aplikacji.

 

 

KROK 1: Rozpocznij nowy projekt, od górnej lewej ikony (Lub w menu Plik > Nowy > Projekt STM32), aby rozpocząć.

 

Krok 2: Nazwa projektu: G0_LED, a następnie kliknij przycisk Zakończ.

Ze schematu ideowego, że LED4 jest sterowany przez STM32G071, a port to PA5.

Krok 3: W System Core > SYS wybierz Serial Wire, ustaw PA5 jako GPIO_OUTPUT.

Skonfiguruj użyj etykiety PA5 jako LED_GREEN, jak poniżej:

 

Krok 4: Następnie wygeneruj kod.

 

CubeIDE, na którym ta funkcjonalność jest rozwijana, generuje pliki C do pracy w katalogu Src i umieszcza warstwę HAL (Hardware Abstraction Layer) w katalogu Includes. Wygląda na to, że CubeIDE działa dokładnie w ten sam sposób. Rozwiń foldery po prawej stronie pod widokiem projektu i zobacz, co wygenerował, aby pracować dla Ciebie.

 

 

Krok 5: Dodajmy teraz odrobinę naszego kodu C! Po obszarze nieskończonej pętli dodamy kod, aby przełączyć diodę LED w sekcji 3, jak poniżej:

 

 

Kompilacja projektu i pobranie go na tablicę

STM32CubeIDE faktycznie ułatwia kompilację naszej pracy i umieszczenie jej na chipie STM32. Pierwszym krokiem jest stworzenie skompilowanego .elf (binarnej wersji naszego kodu). Aby wygenerować .elf, musimy wykonać kompilację. Jest to tak proste, jak naciśnięcie przycisku budowania na pasku narzędzi.

Teraz informacje o kompilacji są prezentowane w konsoli na dole ekranu.

Teraz chcemy wysłać ten skompilowany plik binarny do mikrokontrolera STM32.

Podłączmy zestaw deweloperski:

Czerwona dioda LED zasilania (po lewej stronie niebieskiego przełącznika) świeci, podobnie jak większa dioda LED komunikacji (przez kabel USB). Wewnątrz STM32CubeIDE wybierz przycisk uruchamiania.

Spowoduje to otwarcie okna dialogowego Uruchom (ponieważ uruchamiamy je po raz pierwszy). Ustawienia, które teraz wybieramy, zostaną zapisane jako konfiguracja uruchomienia, którą będziemy mogli ponownie wykorzystać lub edytować później.

Po prostu naciśnij Zastosuj, a następnie OK, a pobieranie będzie kontynuowane. Konsola wypełni się teraz ciekawym tekstem:

Dioda LED zapala się i gaśnie co 500ms. masz wszystko skonfigurowane.

STM32 kontra Arduino

STM32 kontra Arduino

Sprawdź nasze Tablica sterowania!

 

Arduino

Arduino jest bardziej kreatywne, osłabia działanie konkretnego sprzętu, jego funkcje i składnia są bardzo proste i bardzo „głupi”.

Większość głównych elementów sterujących Arduino to mikrokontroler AVR. Zaletą Arduino jest wysoka enkapsulacja kodu i mniejsza liczba zdań, co zmniejsza trudność tworzenia oprogramowania.

Arduino jest stosunkowo łatwe do rozpoczęcia, o ile rozumiesz trochę sprzętu i C++, możesz rozwijać.

Większość funkcji Arduino ma dobrze zbudowane biblioteki, więc jest bardzo prosty w obsłudze, ale sterowalność nieco bardziej skomplikowanych funkcji jest słaba. 

 

STM32

STM32 zwraca większą uwagę na praktykę inżynierską. W rzeczywistości w fabryce jest wiele prostych przyrządów, takich jak regulatory temperatury, zwykłe sterowniki silników, tanie sterowniki PLC i niektóre zabawki cywilne, kontrolery gier, przewodowe klawiatury i myszy oraz inne urządzenia peryferyjne i tak dalej.

STM32 jest używany głównie jako produkty dla profesjonalnych programistów, co wymaga pewnej wiedzy zawodowej, ale jednocześnie pisanie kodu realizującego funkcje jest stosunkowo skomplikowane. Na przykład port szeregowy wyprowadza prosty ciąg. W przypadku Arduino może zaczynać się od nowego projektu i można go zrealizować za pomocą 10 linijek kodu. Jeśli jednak używasz narzędzi programistycznych STM32, takich jak Keil, może to wymagać setek linii kodu lub więcej.

Jeśli chodzi o open source: rzeczy wykonane za pomocą STM32 mogą być open source, jeśli chcesz open source, i nie możesz publikować niczego, jeśli nie chcesz open source.

 

Wnioski

 

Oto kilka sugestii dotyczących wyboru:

Jeśli jesteś zwykłym studentem poniżej poziomu uniwersyteckiego, który nie ma głębokiego zrozumienia języków programowania, zaleca się rozpoczęcie pracy z Arduino. Jeśli umiejętności C są słabe i wymyślą STM32, wkrótce wpadniesz na pomysł poddania się.

Jeśli studiujesz tylko do pracy, zdecydowanie mikrokontroler STM32.

Jeśli uczysz się dla zabawy i nie jesteś specjalistą od elektroniki i nie masz zaufania, Arduino jest zalecane.

Jeśli masz dobre umiejętności programistyczne, zalecany jest STM32. Gdy to zrobisz, możesz przyjrzeć się rzeczom stworzonym przez społeczność open-source Arduino i możesz to łatwo zrobić za pomocą STM32.

Oczywiście, jeśli masz taką możliwość, możesz nawiązać kontakt z obydwoma. Generalnie podstawowe funkcje Arduino można opanować w niecały tydzień. Jeśli będziesz tego potrzebować w przyszłości, możesz swobodnie przeszczepić kod Arduino na platformy MCU takie jak STM32.

W rzeczywistości oba są skierowane w nieco inne kierunki. Arduino to wybór dla hobbystów elektroniki ogólnej i majsterkowiczów, podczas gdy STM32 jest często używany do rozwoju i produkcji rzeczywistych produktów.