QEMUを使用した組み込みLinuxシステムのエミュレート

QEMUを使用した組み込みLinuxシステムのエミュレート

 

はじめに

組み込みソフトウェアの開発は、開発ボードや外部モジュールデバイスなどの組み込みハードウェアデバイスに依存していますが、デバッグ作業が周辺機器と関係がない場合、ハードウェアを購入せずにQEMUを使用してシミュレートできるのはカーネルデバッグのみです。

LinuxおよびWindowsホスト、およびエミュレートされたPowerPC、ARM、MIPS、およびSPARCターゲットで使用できます。 QEMUは、ホストとターゲットプロセッサの間に最小限の変換レイヤーを提供するというアプローチを採用しています。 ホストプロセッサはエミュレータを実行しているプロセッサであり、ターゲットプロセッサはエミュレートされているものです。

以下は、QEMU開発環境をセットアップするプロセスの詳細な紹介です。

 

2。 環境

2.1使用環境

* Ubuntu-18.04.1

また:

※パソコン:Windows10

*仮想マシン:VirtualBox-5.18

*仮想OS:Ubuntu-18.04.1

*シミュレートされた開発ボード:vexpres

2.2環境のセットアップ時に使用されるツール

* qemu-4.2.0

* linux-4.14.172(Linuxカーネル)

*u-boot-2017.05

*busybox-1.31.1

* アーム-linux-gnueabi-gcc

関連するすべてのファイルを/ home / joe / qemuに配置します

3.クロスコンパイルツールをインストールします

#sudo apt install gcc-arm-linux-gnueabi

 

インストールが成功したかどうかを確認します

$ arm-linux-gnueabi-gcc -v

組み込み仕様を使用します。

COLLECT_GCC = arm-linux-gnueabi-gcc

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

ターゲット:arm-linux-gnueabi

構成:../ src / configure -v –with-pkgversion = 'Ubuntu / Linaro 7.5.0-3ubuntu1〜18.04'–with-bugurl = file:/// usr

スレッドモデル:posix

gccバージョン7.5.0(Ubuntu / Linaro 7.5.0-3ubuntu1〜18.04)

 

4.Linuxカーネルを構成およびコンパイルします

4.1Linuxカーネルのダウンロード

必要なカーネルバージョンをwww.kernel.orgからダウンロードします。

ここでは、比較的最新の長期的にサポートされているカーネルバージョンlinux-4.4.157をダウンロードします。

wgetの https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.4.157.tar.xz  / qemuディレクトリへ

4.2Linuxカーネルを解凍します

#tar xvJf linux-4.4.157.tar.xz

4.3Linuxカーネルのコンパイル

//カーネルソースファイルディレクトリを入力します

#cd linux-4.4.157

CROSS_COMPILE = arm-linux-gnueabi- ARCH = armvexpress_defconfigを作成します

CROSS_COMPILE = arm-linux-gnueabi- ARCH = armmenuconfigを作成します

menuconfigを実行すると、ncursesパッケージが欠落していることが示される場合は、次のコマンドを実行してインストールします)

$ sudo apt-get install libncurses5-dev

メニュー設定を入力し、以下の設定を行います

クロスツールチェーンでコンパイルする

コンパイルが成功したら、ディレクトリの下にカーネルイメージファイルを生成します

arch / arm / boot、zImageおよびdtbは、便利な使用のために別のフォルダーにコピーできます

 

5.QEMUツールをインストールします

5.1QEMUをインストールする

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

* tar xvJf qemu-4.2.0.tar.xz

* CD qemu-4.2.0

5.2QEMUを構成する前に依存パッケージをインストールする

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

コンパイル後にファイルが乱雑になるのを防ぐために、コンパイルの中間ターゲットパスとしてビルダーディレクトリを作成します。

QEMUを構成、コンパイル、インストールします。

5.3アームアーキテクチャの下ですべてのボードをサポートするようにQEMUを構成する

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

次のプロンプトが表示されたときにpixmanが見つからない場合は、

sudo apt-get installlibpixman-1-devを使用してインストールします。

5.4QEMUバージョンを表示する

5.5QEMUでサポートされている開発ボードを表示する

5.6QEMUの実行

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

OR:

$ 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”

qemuのテストと起動を改善するために、起動スクリプトstart.shを作成し、スクリプトにchmod + xstart.shを実行する権限を与えることができます。

 

#!/ bin / bashに

 

qemu-システムアーム\

-m vexpress-a9 \

-m 512M \

-カーネル/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 \

-ノグラフィック\

-「console = ttyAMA0」を追加します

 

6.ルートファイルシステムを作成します

busyboxを使用して、単純なルートファイルシステムを作成します。

6.1busyboxツールのダウンロード

https://busybox.net/downloads/からbusyboxをダウンロードします

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

#tar xjvfbusybox-1.31.1.tar.bz2

#cdbusybox-1.31.1

#defconfigを作成します

#CROSS_COMPILE = arm-linux-gnueabi-を作成します

#make install CROSS_COMPILE = arm-linux-gnueabi-

次の情報が表示され、インストールが成功したことを示します。

インストールが完了すると、生成されたターゲットファイルはデフォルトで./_installディレクトリになります。

 

6.2ルートファイルシステムを生成する

6.2.1busyboxをコンパイルしてインストールする

#mkdir rootfs

#sudo cp -r _install / * rootfs /

6.2.2ルートファイルシステムにglibcライブラリを追加し、ローダーとダイナミックライブラリを追加します

#sudo cp -r _install / * rootfs /

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

6.2.3 4つのtty端末デバイスを作成します(cは文字デバイス、4はメジャーデバイス番号、1〜4はマイナーデバイス番号をそれぞれ表します)

 

6.3SDカードファイルシステムイメージの作成

6.3.1空のSDカードイメージを生成する

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

6.3.2SDカードをextsファイルシステムとしてフォーマットする

#mkfs.ext3 rootfs.ext3

6.3.3rootfsをSDカードに書き込む

#sudo mount -t ext3 rootfs.ext3 / mnt -o loop

#sudo cp -rf rootfs / * / mnt /

#sudo umount / mnt

 

7.確認します

7.1Qemuを起動する

次のコマンドを実行してテストし、コンパイルされたカーネルが正常に実行できるかどうかを確認します

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

またはスクリプトを使用する:

 

上記のテストでは、カーネルがパニックを報告し、ルートファイルシステムが不足していることを示しています。

上記の問題は、x86環境で生成されたbusyboxツールが原因です。

busyboxのインストール時にmakeinstallを使用したので、

ARCH = arm CROSS_COMPILE = arm-linux-gnueabi-installを作成します

 

コンパイルツールは、armプラットフォームで使用されるbusyboxツールを生成します

#ファイルrootfs / bin / busybox

rootfs / bin / busybox:ELF 32ビットLSB実行可能ファイル、ARM、EABI5バージョン1(SYSV)、動的リンク、インタープリター/ lib / ld-、GNU / Linux 3.2.0用、BuildID [sha1] = cbcd33b8d6c946cb19408a5e8e714de554c87f52、削除

 

7.2再確認

これで、QemuはLinuxカーネルを起動し、ファイルシステムを正常にマウントし、シリアル端末を介して簡単な機能でシステムと対話できるようになりました。 印刷プロセスで/etc/init.d/rcSを実行できないという問題は、/ etc / init.d / rcSファイルを追加するだけで済みます。 ファイルの内容は、プロンプトステートメントにすることができます。

 

7.3QEMUを終了します

qemuを終了するXNUMXつの方法

*別の端末入力:すべてのqemu-system-armを強制終了します

* Qemu入力の場合:Ctrl + A; NS

QEMU:終了しました

 

8.u-bootを使用してLinuxカーネルを起動します

組み込みシステムには通常、u-boot、kernel、rootfs、およびappfsが含まれます。 下図に示すARM開発ボード上のこれらの部品の位置関係

 

ブートローダー ブートパラメータ カーネル rootfs アプリ

 

RootfsはボードまたはPCで実行できます

 

8.1Uブーツを準備する

8.1.1u-bootをダウンロードする

http://ftp.denx.de/pub/u-boot/、使用します:u-boot-2021.01.tar.bz2

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

8.1.2u-bootをコンパイルします

#vim Makefile

CROSS_COMPILE = arm-linux-gnueabi-

#vim config.mk

ARCH =アーム

#vexpress_ca9x4_defconfig、エラーを作成します

必要:sudo apt install bison

sudo apt install flex

次に:#make-j4エラー

必要性:エクスポートCROSS_COMPILE = arm-linux-gnueabi-

エクスポートARCH = arm

もう一度:#vexpress_ca9x4_defconfigを作成します

#make -j4

 

 8.1.3テスト、u-bootの開始

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

 

8.2カーネル構成のコンパイル

u-bootを使用してカーネルイメージを起動します。

カーネルをuImage形式にコンパイルする必要があります。

メモリ内のuImageのロードアドレスを指定する必要があります

カーネルをコンパイルするときに指定します。makeLOADADDR=? uImage -j4

 

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

#LOADADDR = 0x60003000 uImage-j4を作成します

 

u-bootのコンパイルが完了すると、ツールフォルダーの下にmkimageファイルが生成されます。このファイルをクロスコンパイラディレクトリの下のbinフォルダーにコピーします。

$ cd qemu / linux-4.4.157

エラー:

$ sudo apt install u-boot-tools

uImageを取得する

9.QEMUネットワーク機能の設定

Qemu仮想マシンがu-bootで起動するとき、uImageをメモリにロードする必要があり、uImageはTFTPサーバーを介してメモリ内の指定されたアドレスにダウンロードできます。

9.1ホストカーネルがtun / tapモジュールをサポートしているかどうかを確認します

//ブリッジネットワークが依存するXNUMXつのツールをインストールします

#sudo apt install uml-utilities bridge-utils

tunデバイスファイルの作成:/ dev / net / tun(通常は自動的に作成されます)

/ etc / network / interfacesを変更します(ネットワークを構成し、再起動して有効にします)

#sudo vim / etc / network / interfaces

auto loiface lo inet loopbackauto enp0s3 //仮想ネットワークカードの名前autobr0iface br0 inet dhcpbridge_ports enp0s3

 

再起動しない

#reboot

次に、Qemuのネットワーク環境を確認します

仮想ネットワークポートbr0は、Qemu仮想マシンとLinuxホスト間の通信用のネットワークポートです。

 

10.TFTPサーバーをインストールします

Qemuシミュレーション開発ボードのuImageを起動するときに、uImageをメモリにダウンロードするTFTPサーバーを作成します

 

10.1tftpツールをインストールします

 

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

 

10.2構成ファイルを変更し、TFTPサーバーディレクトリを設定します

#sudo vim / etc / default / tftpd-hpa

......

TFTP_DIRECTORY =” / home / joe / tftpboot”

......

10.3Linuxホストにtftpディレクトリを作成します

#mkdir / home / joe / tftpboot

#chmod 777 / home / joe / tftpboot

 

10.4tftpサービスを再起動します

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

 

10.5u-bootでカーネル起動パラメータを設定する

uImageとcexpress-v2p-ca9.dtbをtftpbootにコピーします

Qemuを起動して確認します

 

$ 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 -sdrootfs。 ext3

 

現在、rootfsディレクトリは単純なルートファイルシステムであり、ミラーファイルにすることができ、ミラーファイルを開発ボードに書き込むか、LinuxカーネルをQemuのu-bootで起動してマウントすることができます。ミラーファイル。 また、NFSネットワークファイルシステムを介して起動するように設定することもできます。

 

11.NFSファイルシステムをマウントします

11.1NFSサービスのインストールと構成

11.1.1インストール

$ sudo apt install nfs-kernel-server

 

11.1.2構成

$ sudo mkdir / home / joe / qemu / rootfs

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

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

$ sudo nano / etc / exports

追加:/ home / joe / qemu / rootfs *(rw、sync、no_root_squash)

 

nfsサーバーを再起動します。

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

または:$ systemctl restart nfs-kernel-server

 

NFS共有ディレクトリが作成されているかどうかを確認します

$ sudo showmount –e

NFSネットワークファイルシステムを使用する場合、Linuxホストはシステムファイアウォールを閉じる必要があります。そうしないと、システムの実行中に異常が発生します。

 

まとめ

うまくいけば、このブログの助けを借りて、あなたはQEMUについてもっと知っているでしょう。 上で示したすべてのテクニックは、私たちのプログラムへのさまざまな提出で使用されました。 QEMUでエミュレートする単一の固定された方法はありません。 さまざまなテクニックを調べて、何が効果的かを確認してください。 知識をよく理解してください。そうすれば、それが予期しない方法でどのように役立つかに驚くでしょう。

LicheePiの紹介

LicheePiの紹介

LicheePiは、近年人気のある低コストのAllwinner V3Sプラットフォームで動作する、繊細なシングルボードコンピューターです。 初心者がLinuxを学ぶため、または製品開発のために使用できます。 豊富な周辺機器(LCD、ETH、UART、SPI、I2C、PWM、SDIO…)と強力なパフォーマンスを提供します。

 

       

        ライチゼロライチナノ

 

 

 

       

                                 ライチパイゼロライチパイナノ 

 

 

特徴

Lイチーパイゼロ

ライチピナノ

SoCの オールウィナー V3S オールウィナー F1C100S
CPU のARM Cortex-A7 ARM9
動作周波数 1.2GHz 408MHz
RAM 64MB DDR2 32MB DDR2
Storage SPIフラッシュ/ Micro-SD SPIフラッシュ/ Micro-SD

ディスプレイ

 

*ユニバーサル40PRGB LCD FPC:

*サポートされている解像度:272×480、480×800,1024、600×XNUMX

*オンボードRTPチップ、タッチスクリーンをサポート

*ユニバーサル40PRGB LCD FPC:

*サポートされている解像度:272×480、480×800,1024、600×XNUMX

*オンボードRTPチップ、タッチスクリーンをサポート

インタフェース

 

*SDIO×2
*SPI×1
* I2C x2
* UARTx3
* 100Mエーテルx1(EPHYを含む)
* OTG USB x1
* MIPI CSI x1
* PWM×2
*LRADC×1
*スピーカーx2 +マイクx1
*SDIO×1
*SPI×2
*TWIX×3
* UART x3
* OTG USB x1
* TV 出力 * PWM x2
*LRADC×1
*スピーカーx2 +マイクx1

電気情報

 

マイクロUSB5V、2.54mmピン3.3V〜5V電源; 1.27mmスタンプホール電源。

1GHz linux IDLEは90〜100mAを実行します。 CPUバーン実行〜180mA

保管温度-40〜125

動作温度 -20~70

マイクロUSB5V、2.54mmピン3.3V〜5V電源; 1.27mmスタンプホール電源。

408MHz linux IDLEは90〜54mAを実行します。 画面動作電流〜250mA

保管温度-40〜125

動作温度 -20~70

 

Linuxストレステストを実行するときの温度は、体温よりわずかに高いだけです。

 

Lichee Piは、Linux、RT-Tread、Xboot、またはOSなしなどの多くのOSをサポートしています。

ほとんどのMCUと同様に、Lichee Piは、GPIO、UART、PWM、ADC、I2C、SPIなどのいくつかの低速イン​​ターフェースに接続できます。 さらに、RGB LCD、EPHY、MIPI CSI、OTGUSBなどの他の高速周辺機器を実行できます。 Lichee Piには、ヘッドフォンまたはマイクに直接接続できるコーデックが統合されています。

 

ディスプレイコネクタ:

ユニバーサル40PLCDには、LEDバックライトと13線式ライン、電気抵抗タッチが付属しており、ディスプレイと相互作用に非常に適しています。 AXNUMXはXNUMX線式抵抗タッチ機能にも対応しており、XNUMX点タッチ検出が可能です。

 

このインターフェースは、のインターフェースと互換性があります オリエントディスプレイ 製品。

 

RGBからVGA:

 

RGBからHDMI:

 

RGBからGPIOへ:

 

RGBからDVPCSIへ:

 

ライチパイリンク:

http://dl.sipeed.com/
ウィキ:maixpy.sipeed.com
ブログ:blog.sipeed.com
電報グループ:https://t.me/sipeed

Orient Display EmbeddedProjectの紹介

Orient Display EmbeddedProjectの紹介

Orient Displayは、世界をリードするディスプレイのXNUMXつです。 LCDディスプレイメーカー これは、1996年に25年以上の研究開発と生産の経験を持つ経営幹部によって設立されました。 Orient Displayは、ディスプレイに加えて、ARMアーキテクチャを含み、組み込み製品で豊富な経験を蓄積している組み込み技術にも焦点を当てています。

現在、Orient Displayテクニカルサービスには、ハードウェア、ソフトウェア、およびコンサルティングが含まれています。

 

本サイトの ハードウェアチーム 設計のアイデアや要件に応じて、最短時間でプロトタイプを作成します。 私たちは、短い開発サイクルで高い信頼性の要件を満たすために、費用効果の高いまたは複雑な高性能ボードの設計を専門としています。

- 概略設計

–PCBレイアウト

–業界製品のカスタマイズ

 

本サイトの ソフトウェアチーム Linuxベースを専門としています ARM®デザインいくつか例を挙げると、PowerPCおよびx86プロセッサ。 組み込みシステムにおけるLinux、Android、およびWinCEの完全なソリューションプロバイダーとして、製品のエンドツーエンドのシステム関連の問題を解決できます。

–システムの移行、最適化、調整

–開発を推進する

–カーネルの調整

– LINUX KERNELをARM、PPC、またはx86ボードに移植する

– APP開発(アプリケーション、Linux QT、Linux C / ++)

 

本サイトの FAE チーム また、製品または半製品のすべてのテクノロジーを提供します。

–当社製品のソフトウェアおよびハードウェアリソースに関するコンサルティングを提供します。

–当社製品のソフトウェアおよびハードウェアマニュアルの使用中に発生した問題を解決します。

–OEMおよびODMのアフターセールステクニカルサポート。

–データの保守と更新。

– Orient Display製品は、当社の支援を受けています 最低価格保証.

 

開発シーケンス

 

1. システム要件分析

*設計タスク、目標、仕様

–これはお客様から提供されたものです

*機能要件と非機能要件

–システムのパフォーマンス、コスト、消費電力、ボリューム、重量、その他の要素を含める

 

2.アーキテクチャ設計

優れたアーキテクチャは、設計を成功させるための鍵です。 このステップでは、多くの場合、次のことを行う必要があります。

  • メインチップを選択します。

— ARM Cortex A、RまたはM、またはPowerPcまたはColdFire

  • RTOSを決定します。

— Linux、uClinux、Vxworks、freeRTOS、WinCE

  • [表示]を選択します。

- TFTパネル, 日光読み取り可能なTFT, LCDガラスパネル, グラフィックLCD,  有機ELディスプレイ, タッチパネル, 組み込みLCDディスプレイ or カスタムメイドのディスプレイ by オリエントディスプレイ

  • プログラミング言語:

— c / c ++、python、Java

  • 開発ツール:

u-boot、busybox、QT、Ubuntu、stm32CubeIde、ビジュアルスタジオ、androidスタジオ、keil uVision、RT-Treadスタジオ

 

3. ハードウェアとソフトウェアの共同設計

製品開発サイクルを短縮するために:

ハードウェア:  通常、オリエントディスプレイなどの評価ボードからプロジェクトを開始します aiy-a002m, aiy-a003m & aiy-a005m。 後でプロジェクトに合わせてボードをカスタマイズし、不要なパーツを破棄します。

ソフトウェア開発シーケンス:

  • 通常、ブートローダーとしてu-bootを選択します。これは、1)CPUを既知の状態に初期化する2)メモリを初期化する3)割り込みを初期化する4)クロックを初期化する5)カーネルを実行中のアドレスにロードする
  • カーネルの構成:

1)カーネルシステムの構成:*メモリ管理、*ファイルシステム、*デバイスドライバー、*ネットワークスタック、* I / Oシステム

2)I / Oデバイスドライバーの書き込み* charデバイスドライバー、* blockデバイスドライバー、* netデバイスドライバー

  • アプリケーションの選択:

*ユーザーライブラリを選択します*ユーザーアプリケーションを構築します*初期化プロセスを構成します*ルートFSを構築します

 

4。 Sシステム統合

システムのソフトウェア、ハードウェア、および実行デバイスを統合し、ユニット設計プロセスのエラーをデバッグ、検出、および改善します。

 

5.システムテスト

設計されたシステムをテストして、仕様に記載されている機能要件を満たしているかどうかを確認します。 組み込みシステム開発モデルの最大の特徴は、ソフトウェアとハ​​ードウェアの包括的な開発です。

 

まとめ

Orient Displayには、コンセプトから製造までの組み込みディスプレイモジュールを作成する経験と能力を備えた才能ある専門家の素晴らしいチームがいます。

ご不明な点がございましたら、次のエンジニアにお問い合わせください。 tech@orientdisplay.com。

ARMプロセッサの選択方法

ARMプロセッサの選択方法

概要

の最も広い範囲 マイクロプロセッサ ほぼすべてのアプリケーション市場のコア。 探検 ARM。 ほぼすべてのアプリケーション市場、プロセッサのパフォーマンス、電力、およびコストの要件は非常に重要です。 システムのパフォーマンスは、ハードウェアに大きく依存します。 この記事では、ARMプロセッサの研究をガイドし、意思決定に大いに役立ちます。

 

ARMの簡単な紹介

図1.ARMプロセッサのロードマップ

 

2003年以前は、ARM7(ARMv4アーキテクチャ)、ARM9(ARMv5アーキテクチャ)、ARM11(ARMv6アーキテクチャ)を含む従来のARMプロセッサがあります。 ARM7にはMMU(メモリ管理ユニット)がなく、LinuxやWinCEなどのマルチユーザーマルチプロセスシステムを実行できません。 MMUを必要としないucOSやucLinuxなどのシステムのみを実行できます。 ARM9およびARM11は、Linuxを実行できるMMUを備えた組み込みCPUです。

2003年以降、ARMv7アーキテクチャに関しては、Cortexにちなんで名付けられ、次のXNUMXつのシリーズに分けられました。 Cortex-A、Cortex-R、およびCortex-M。

  • 皮質A —パフォーマンスを重視するシステム用のアプリケーションプロセッサコア
  • コーテックス-R –リアルタイムアプリケーション用の高性能コア
  • コーテックス-M –幅広い組み込みアプリケーション向けのマイクロコントローラーコア

簡単に言えば、 皮質A このシリーズは、高いコンピューティング要件があり、豊富なオペレーティングシステムを実行し、インタラクティブなメディアとグラフィックスのエクスペリエンスを提供するアプリケーションに適しています。 コーテックス-R 信頼性、高可用性、フォールトトレランス、保守性、およびリアルタイムの応答を必要とする場合に適しています。 コーテックス-M このシリーズは、コストと電力に敏感なMCUとエンドアプリケーションを対象としています。

 

Cortex-A VS Cortex-R VS Cortex-M

皮質A

Cortex-プロセッサのカテゴリは、LinuxおよびAndroidデバイス専用です。 スマートウォッチやタブレットから始まり、ネットワーク機器に続くすべてのデバイスは、Cortex-Aプロセッサでサポートできます。

  • Cortex-Aプロセッサ(A5、A7、A8、A9、A12、A15、およびA17)は、ARMv7-Aアーキテクチャに基づいています。
  • Aプロセッサの一般的な機能のセットには、メディア処理エンジン(NEON)、セキュリティ目的のツール(Trustzone)、およびサポートされているさまざまな命令セット(ARM、Thumb、DSPなど)が含まれます。
  • Cortex-Aプロセッサの主な機能は、ユーザーに可能な限り最高のサービスを提供するために緊密にバンドルされた最高のパフォーマンスと優れた電力効率です。

Cortex-Aプロセッサの主な特徴:

Cortex-A5:Cortex A5は、Cortex Aシリーズの中で最小かつ最低電力のメンバーですが、マルチコアパフォーマンスを発揮でき、A9およびA15プロセッサと互換性があります。

Cortex-A7:A7の消費電力はA5とほぼ同じですが、A7によって提供されるパフォーマンスはA20よりも5%高く、Cortex-A15およびCortex-A17との完全なアーキテクチャ互換性があります。 Cortex-A7は、コストに敏感なスマートフォンやタブレットの実装に最適です。

コントレックス-A15: Cortex-A15は、このシリーズの最高性能のメンバーであり、A9の15倍の性能を提供します。 AXNUMXは、ハイエンドデバイス、低電力サーバー、およびワイヤレスインフラストラクチャでそのアプリケーションを見つけます。 これは、データ管理および仮想環境ソリューションに対する最初のプロセッササポートです。

コントレックス-A17: Cortex-A17は、A60よりも9%高いパフォーマンスを示します。 主な目的は、プレミアムクラスのデバイスのニーズを満たすことです。

コントレックス-A50:最新シリーズのContrex-A50は、ARMv8アーキテクチャ上に構築されており、エネルギー効率の高いArch64ビットシステムのサポートを提供します。 64ビットへの移行の明らかな理由は、4GBを超える物理メモリのサポートです。これはCortex-A15およびCortex-A7ですでに実現されています。

 

コーテックス-R

Cortex-Rプロセッサは、ハードディスクコントローラ、ネットワーク機器メディアプレーヤー、およびその他の同様のデバイスなどの高性能リアルタイムアプリケーションを対象としています。さらに、エアバッグ、ブレーキシステム、エンジン管理などの自動車業界を強力にサポートします。

Cortex-R4:  Cortex-R4は、自動車用途に最適です。 最大600MHzのクロックが可能で、デュアルイシュー、プリフェッチ、および低遅延割り込みシステムを備えた8ステージのパイプラインを備えているため、セーフティクリティカルシステムに最適です。

Cortex-R5: Cortex-R5は、R4が提供する機能を拡張し、効率と信頼性を高め、エラー管理を強化します。 デュアルコアの実装により、リアルタイムの応答を備えた非常に強力で柔軟なシステムを構築できます。

Cortex-R7: Cortex-R7はパフォーマンスを大幅に拡張します。 これらは11ステージのパイプラインを備えており、アウトオブオーダー実行と高レベルの分岐予測の両方を可能にします。 ツールは、ロックステップ、対称、および非対称のマルチプロセッシング用に実装できます。 汎用割り込みコントローラーは、言及する必要のあるもうXNUMXつの重要な機能です。

 

コーテックス-M

特にMCU市場をターゲットにするように設計されたCortex-M。 Cortex-MシリーズはARMv7-Mアーキテクチャ(Cortex-M3およびCortex-M4に使用)上に構築されており、小型のCortex-M0 +はARMv6-Mアーキテクチャ上に構築されています。 Cortex-Mは32ビットの世界向けになり、8051は8ビット向けになりました。これは多くのベンダーが提供する業界標準のコアです。 たとえば、Cortex-MシリーズはFPGAのソフトコアとして実装できますが、メモリ、クロック、および周辺機器が統合されたMCUとして実装されるのがはるかに一般的です。 エネルギー効率のために最適化されたものもあれば、高性能のために最適化されたものもあり、スマートメータリングなどの特定の市場セグメントに合わせて調整されたものもあります。

特にコストに敏感なアプリケーションや、8ビットから32ビットに移行するアプリケーションの場合、Cortex-Mシリーズの最小メンバーが最適な選択肢となる可能性があります。

Cortex-M0: Cortex-M0 +はThumb-2命令セットを使用し、2ステージのパイプラインを備えています。 重要な機能は、シングルサイクルGPIO用のバスとマイクロトレースバッファーです。

Cortex-M3&M4:  Cortex-M3とCortex-M4は非常によく似たコアです。 それぞれが3ステージのパイプライン、複数の32ビットバス、最大200 MHzのクロック速度、および非常に効率的なデバッグオプションを提供します。 大きな違いは、DS用のCortex-M4コアの機能です。 Cortex-M3とCortex-M4は、同じアーキテクチャと命令セット(Thumb-2)を共有しています。 アプリケーションで浮動小数点演算が必要な場合は、Cortex-M4よりもCortex-M3の方がかなり高速にこれを実行できます。 とはいえ、Cortex-M4のDSPまたはFPU機能を使用していないアプリケーションの場合、Cortex-M3で同じレベルのパフォーマンスと消費電力が見られます。 つまり、DSP機能が必要な場合は、Cortex-M4を使用してください。 それ以外の場合は、Cortex-M3がその役割を果たします。

 

まとめ

図2.皮質の概要

 

ARMプロセッサは、さまざまな目的のためにさまざまな機能を提供します。 少し考えて調査することで、アプリケーションのニーズに合った適切なプロセッサを見つけることができます。 ハイエンドタブレット用か、超低コストのワイヤレスセンサーノード用か。

Cortexコアを正しく選択し、アイデアを実現することは課題です。 しかし、経験豊富な専門家のチームがすべての問題を処理し、あらゆる複雑さの概念を実装できます。

Orient Displayは、長年にわたってARMプロセッサ関連のテクノロジに焦点を当てており、ARMアーキテクチャ製品の開発と実装において豊富な経験を蓄積してきました。 市場の一般的なニーズを満たす開発プラットフォームとコアボードを継続的に立ち上げながら、顧客の個々のプロジェクトのニーズにも対応します。 カスタマイズされたサービスを提供します。

当社のハードウェアチームは、お客様の設計アイデアとニーズに応じて、最短時間でプロトタイプを作成できます。 当社のソフトウェアチームは、カッティングドライバーレイヤーのすべての機能をカスタマイズするお手伝いをします。

お問い合わせ そして、私たちはあなたの最初のアイデアから最終製品までの計画を立てるのを手伝います。

Raspberry PiでグラフィックLCDディスプレイを使用するにはどうすればよいですか?

グラフィックLCDをラズベリーPIに接続する方法は?

記事は示しています 128×64を接続する方法 グラフィックLCDディスプレイラズベリーパイ.

使用するLCDはST128のLCDコントローラーを備えた64×7565です。 Raspberry Pi3.3Vレールから直接電力を供給できます。 データ用に5つのGPIOピンが必要です。

回路図は、CS(チップセレクト)、RST(リセット)、A0(レジスターセレクト)を3つのGPIOピンに接続できます。 この例では、8,24、25、および7565がデフォルト値です。 ST11 Pythonクラスをインスタンス化するときに、パラメーターとしてさまざまな値を指定できます。 GLCDのSCLK(シリアルクロック)は、PiのシリアルクロックであるGPIO10に送られます。 GLCDのSID(シリアル入力データ)は、MOSIであるPiのGPIO10に送られます。 SIDとSCLKにはGPIO11と3.3を使用する必要があります。 VddはPIのXNUMXVピンに接続され、アースも接続されています。

LCDにはRGBバックライトがあります。 LEDピンはGPIOの16,20、21、および7565に接続できます。Piからの色を制御するには、ST20クラスをインスタンス化するときにRGBピンを指定します。 LEDの故障を防ぐために電流を制限するために、抵抗を直列に配置する必要があります。 LEDの明るさは、さまざまな値の抵抗を使用して変更できます。 もちろん、電流を約40mAに調整するのが最善です。もちろん、値が異なると、色の組み合わせも異なります。 真っ白な色を混ぜるのはとても難しいです。 抵抗値を慎重に計算してください。60mAでは、LEDの輝度は時間とともに急激に低下し、電流がXNUMXmAに近づくと、LEDが故障し、恒久的に損傷する可能性があります。

グラフィックLCDをプログラムする方法は?

ディスプレイは、水平128ピクセル、垂直64ピクセルです。 LCDは8つの水平ページに分割できます。 それらは3から0および7から4まで上から下に番号が付けられています。 各ページには、128列と8行のピクセルが含まれています。 ピクセルをアドレス指定するには、ページと列番号を指定し、バイトを送信して8つの垂直ピクセルを一度に埋めます。

ディスプレイにはSPIがあります (シリアル周辺機器インターフェース) Piに接続するには。 SPIには、MOSI、MISO、およびクロックの3つのラインが必要です。 Piがマスターで、GLCDがスレーブです。 この例では、GLCDへの書き込みのみで準備ができていないため、MOSIおよびクロックラインへの接続が必要です。 MOSIはPiからGLCDへの出力であり、Clockはタイミングを同期します。

  1. RaspberryPiでSPIを有効にする 最初の
  2. raspi-configメニューから、[Advanced Options]、[SPI]の順に選択します。 次に、「SPIインターフェースを有効にしますか」で「はい」を選択します。 [OK]をクリックして、再起動します。 「デフォルトでロードされるSPIカーネルモジュール」で「はい」を選択します。 SPIを有効にした後、Piを再起動します。 次に、Ismodを使用してSPIをテストしますPiのバージョンに応じて、SPI_bcm2708またはspi_bcm2835を返す必要があります。 python SPIライブラリには、apt-getinstallでインストールできるpython2.7devが必要です。
  3.   PythonSPIライブラリ と呼ばれる py-spidev。 git:GLCDを使用してインストールできます Pi用のPythonライブラリはGitHubサイトからダウンロードできます.
  4. メインのST7565ライブラリ(st7565.py)は、描画、テキストとビットマップ、およびX-GLCDフォントをロードするためのフォントモジュール(xglcd_font.py)を処理します。 点、線、長方形、円、楕円、正多角形を作成するための基本的な描画コマンドは次のとおりです。詳細については、以下のリファレンスを参照するか、 エンジニアにお問い合わせください.

STM32CubeIDEを使用したSTM071G32RBボードに基づくプロジェクトの開始

STM32CubeIDEを使用したSTM071G32RBボードに基づくプロジェクトの開始

ご確認ください> コントロールボード!

32ビットARMベースのマイクロコントローラを使い始めるのは常に少し困難です。 利用可能なマイクロコントローラー、プラットフォーム、開発ボード、ツール、およびソフトウェアが多すぎます。 このノートでは、LEDプロジェクトを開始する方法を段階的に説明します。

はじめに:開発ボードSTM32G071RBについて

特徴:

  • コア:Arm®32ビットCortex®-M0+ CPU、最大周波数64 MHz
  • 最大128Kバイトのフラッシュメモリ、36KバイトのSRAM
  • 柔軟なマッピングを備えた7チャネルDMAコントローラー
  • 12ビット、0.4 µs ADC(最大16外部チャネル)
  • 12つのXNUMXビットDAC、低電力サンプルアンドホールド
  • 2つのIXNUMXC、XNUMXつのUSART、XNUMXつの低電力UART、XNUMXつのSPI

 

はじめに:STM32CubeIDEをインストールします

あなたがダウンロードすることができます STM32CubeIDE 彼らのst.comから。 それは無料です。 次のようにSTM32CubeIDEをインストールします STM32CubeIDEインストールガイド。

 

あなたの最初のプロジェクト:LEDの点滅

コードの記述を開始する前に、プロジェクトを作成する必要があります。 これは他のほとんどのIDEと似ています。プロジェクトは、すべての設定、コード、および定義をすべて同じアプリケーションから管理される単一のコレクションにバンドルするために使用されます。

 

 

ステップ1:新しいプロジェクトを開始します。左上のアイコン(またはメニューの[ファイル]> [新規]> [STM32プロジェクト]の下)から開始します。

 

ステップ2:プロジェクト名:G0_LEDをクリックし、[完了]ボタンをクリックします。

回路図から、LED4はSTM32G071によって制御され、ポートはPA5であることがわかります。

ステップ3:System Core> SYSから、Serial Wireを選択し、PA5をGPIO_OUTPUTとして設定します。

以下のように、PA5の使用ラベルをLED_GREENとして設定します。

 

ステップ4:次にコードを生成します。

 

この機能が開発されたCubeIDEは、Srcディレクトリの下で動作するCファイルを生成し、HAL(ハードウェアアブストラクションレイヤー)をIncludesディレクトリに配置します。 CubeIDEはまったく同じように機能するようです。 プロジェクトビューの下の右側にあるフォルダを展開し、それがあなたのために機能するように生成されたものを確認します。

 

 

ステップ5:今すぐ私たち自身のCコードのスミッジを追加しましょう! 無限ループ領域の後に、以下のようにセクション3の下のLEDを切り替えるコードを追加します。

 

 

プロジェクトをコンパイルしてボードにダウンロードする

STM32CubeIDEを使用すると、実際に作業をコンパイルしてSTM32チップに取り込むのが非常に簡単になります。 最初のステップは、コンパイルされた.elf(コードのバイナリバージョン)を生成することです。 .elfを生成するには、ビルドを実行する必要があります。 これは、ツールバーのビルドボタンを押すのと同じくらい簡単です。

これで、ビルド情報が画面下部のコンソールに表示されます。

ここで実行したいのは、このコンパイル済みバイナリをSTM32マイクロコントローラに送信することです。

開発キットをプラグインしましょう:

大きい方の通信LED(USBケーブルによる)と同様に、赤い電源LED(青いスイッチの左側)が点灯します。 STM32CubeIDE内で、実行ボタンを選択します。

これにより、[実行]ダイアログが開きます(初めて実行するため)。 ここで選択した設定は、後で再利用または編集できる実行構成として保存されます。

[適用]、[OK]の順に押すだけで、ダウンロードが続行されます。 コンソールは、いくつかの興味深いテキストで埋められます。

LEDは500msごとにオンとオフになります。 すべての設定が完了しました。

STM32対Arduino

STM32対Arduino

ご確認ください> コントロールボード!

 

Arduinoの

Arduinoはより創造的で、特定のハードウェアの操作を弱め、その機能と構文は非常に単純で、非常に「ばかげている」ものです。

Arduinoの主な制御のほとんどはAVRマイクロコントローラーです。 Arduinoの利点は、コードのカプセル化が高く、文が少ないことです。これにより、ソフトウェア開発の難しさが軽減されます。

Arduinoは、少しのハードウェアとC ++を理解していれば、比較的簡単に始めることができます。

Arduinoのほとんどの関数には十分に構築されたライブラリがあるため、使用は非常に簡単ですが、少し複雑な関数の可制御性は低くなります。 

 

STM32

STM32は、エンジニアリングの実践により多くの注意を払っています。 実際、工場には温度コントローラー、通常のモーターコントローラー、ローエンドPLCなどの単純な機器が数多くあり、一部の民間玩具、ゲームコントローラー、有線キーボードとマウス、その他の周辺機器などは非常に実用的です。

STM32は主にプロの開発者向けの製品として使用されており、ある程度の専門知識が必要ですが、同時に、機能を実現するためのコードの記述は比較的複雑です。 たとえば、シリアルポートは単純な文字列を出力します。 Arduinoの場合、新しいプロジェクトから開始する可能性があり、10行のコードで実現できます。 ただし、KeilなどのSTM32開発ツールを使用する場合は、数百行以上のコードが必要になる場合があります。

オープンソースに関して:STM32で作成されたものは、オープンソースが必要な場合はオープンソースにすることができ、オープンソースが必要ない場合は何も公開できません。

 

まとめ

 

選択するためのいくつかの提案があります:

プログラミング言語を深く理解していない大学レベル以下の普通の学生の場合は、Arduinoを使い始めることをお勧めします。 Cスキルが弱く、STM32を思いついた場合、すぐに諦めるという考えが浮かびます。

就職のためだけに勉強するなら、決定的にSTM32マイクロコントローラー。

楽しみのためだけに学習していて、電子工学を専攻しておらず、自信がない場合は、Arduinoをお勧めします。

優れたプログラミングスキルがある場合は、STM32をお勧めします。 完了したら、Arduinoオープンソースコミュニティによって作成されたものを確認でき、STM32を使用して簡単に実行できます。

もちろん、能力があれば、両方と連絡を取ることができます。 通常、Arduinoの基本機能は32週間以内に習得できます。 将来必要になった場合は、ArduinoコードをSTMXNUMXなどのMCUプラットフォームに自由に移植できます。

実際、この32つは、実際にはわずかに異なる方向を対象としています。 Arduinoは一般的な電子機器愛好家とDIYの選択肢ですが、STMXNUMXは実際の製品の開発と製造によく使用されます。