i.MX6SXリファレンスマニュアルのセクション13.5(Cortex-M4ブート要件)によると、次のようになります。
• Cortex-A9 は常にプライマリ コアとして起動します。
Cortex-M4 にはブート ROM がなく、POR にはクロックがありません。
Cortex-A9 ROMは、次の機能を担当します。
• A9 ブートローダーのロードと認証、および Cortex-M4 の開始
ファームウェアを統合イメージとして。
• TCRAMLでのCortex-M4初期例外テーブルの設定
•クロックを有効にしてCortex-M4を起動します。
さらに、M4 は、以下を含む最小の初期ベクトル テーブルを取得します。
a) 初期スタックポインタ
b) リセットベクトル
c) NMIベクター
A9がクロックを有効にした後のTCM(L)の固定位置(ゼロオフセット)から。
したがって、A9(ブートローダー)は次の責任があります。
TCM(L)でのM4初期ベクトルテーブルの構成;
M4コードをロードしています。
TrustZone の CSU と RDC の設定(必要な場合)
およびA9 / M4ドメイン分離;
M4クロックを有効にします。
同封のプロジェクトを見て、ビルド、ロードの方法を理解するのに役立ちます
i.MX6 SoloXのCortex-A9コアとCortex-M4コアの両方のスタートアップコードを実行します。
また、i.MX6 SoloXには、アドレスマッピングが異なる2つのコアがあります。
Cortex-A9コアについては、表2-1(システムメモリマップ)を参照してください。
表2-2(CM4メモリマップ)へ i.MX6 SoloXのCortex-M4用
リファレンスマニュアル。Cortex-M4 を実行するには、TCM(L) を埋める必要があります。
は TCML ALIAS (ゼロから) としてアドレス指定されます。同じメモリがマップされます
Cortex-A9の0x007f8000(表2-1には反映されていません)。
この領域には、M4 クロックが有効になった後、Cortex-A9 からアクセスできることに注意してください
CCM_CCGR3年に。
i.MX6 SoloXを使用する際には、以下のリソースが役立つ場合があります。
「Real View ICEとRealViewデバッガをi.MX6 SoloXと連携させるための設定方法」
https://community.freescale.com/docs/DOC-106198
「Processor Expert for i.MX Iron および ARM GCC と Eclipse の統合」
https://community.freescale.com/docs/DOC-103736
「I.MX6SX QSPIフラッシュでU-BootからM4を起動する」
https://community.freescale.com/message/499465
「i.MX 6SoloXおよび i.MX 7Dual/7SoloのLinuxからCortex-M4へのコードのロード 」
http://cache.nxp.com/files/soft_dev_tools/doc/app_note/AN5317.pdf
ありがとうユリ、
SWをロードした後のリセットは、m4c_non_sclr_rstからm4c_rstに変更する必要があるようです。
少なくとも私のレヴにとっては。ボードのC。
うまくいっているように見えるのは:
- M4プラットフォーム(m4p_rst)をリセットし、
- バイナリをロードします
- M4 *コア*のみをリセット(m4c_rst)
コードでは、m4c_non_sclr_rst(非自己クリアSWリセット)が使用されているように見えます。
w / m4c_rstと交換する必要があるようです。
Best,
Tomasz
Hello,
CM4 は、コードを読み込んで実行した後にのみアクセスできます。
- CM4クロックがオンになっている必要があります。
- CM4を有効にしてリセットする必要があります(アサーション/ネガシエーション)。
よろしくお願いします。
Yuri.
こんにちは、ユリ、みんな、
添付の例MX6SX_hello_MFG.7z.zip A9で実行し、M4をロードしようとしています。
すべてのコードを正しく取り込んだと思いますが、そうではないかもしれません。
何が起こるかというと、A9は正常に動作し、M4をロードするように指示すると、M4が消えます。Ulink Pro D jtagで接続できません。
次のエラーが表示されます。
ランニングターゲットNXPに接続 - i.MX6 SoloX Sabre SDB
cd "C:\Users\tomasz\Documents\DS-5 Workspace"
作業ディレクトリ "C:\Users\tomasz\Documents\DS-5 Workspace"
break -d -p "C:\Users\tomasz\Documents\DS-5 Workspace\fireworks_A9x1-FVP_GCC\src\main.c":25
警告(CMD452-COR167):
!ブレークポイント 1 は保留されています
!「C:/Users/tomasz/Documents/DS-5 Workspace/fireworks_A9x1-FVP_GCC/src/main.c」に一致するコンパイルユニットが見つかりませんでした
条件1
ブレークスクリプト 1 ""
無視 1 0
ブレークストップオンコア1
無音解除 1
ブレークポイント 1 (無音)
コア1
現在のコアはCortex-M4(ID1)です
割り込む
エラー(TAD9-NAL30):
!デバイスCortex-M4を停止できません
!ターゲットを停止できません。
何か解決策はありますか。
Hello,
以下がお役に立てば幸いです。
https://community.nxp.com/docs/DOC-331921
よろしくお願いします。
Yuri.
test.binは、DCD、特にMFGツール用のオフセット0x400がありません。
sect.8.7 プログラムイメージ i.MX6SX リファレンスマニュアルをご確認ください。
http://cache.freescale.com/files/32bit/doc/ref_manual/IMX6SXRM.pdf
説明用IVT、DCDヘッダー。
よろしくお願いいたします
イゴール
YuriMuhin_ngなぜ「vectors.s」が生まれたのかコード MX6SX_hello_MFG.7z.zip にあるのは、 I.MX6 Solox for Dummies スレッドに投稿されたコード Igorpadykov とは異なりますか?
また、このスレッドのコード内のファイル「vectors.s」は、 ダミーの「plat_startup.h」にある「PLATFORM_INIT」コードを使用していないことに気付きました。
また、ここで最も重要なことは、このスレッド(test.bin)のコードですMFG ツールと https://community.nxp.com/thread/351961 のコードで動作します しない。このスレッドのコードのように、MFGツールで毎回コードをRAMにロードしたくはありませんが、このコードがmfgツールで動作し、他のスレッドのコードが機能しない理由を知りたいです。
違いを説明するドキュメントはありますか?同封のプロジェクトは、スタートアップコードの構築方法を知るのにあまり役立たず、これら2つの「ベクトル」アセンブリファイルが非常に異なるという事実も助けにはなりません、つまり、最後にいくつかの類似点がありますが、ファイルの先頭は大幅に異なり、これらの違いを説明する方法を見つけた方法はありません。
ありがとうございました。
実際、私はいくつかの図書館を見逃していました。
要約すると、 CodeSourceryを使用せずにi.MX6SoloXのベアメタルコードを開発する 場合は、これを実行する必要があります。
sudo apt-get gcc-arm-none-eabi libnewlib-arm-none-eabi -y
次に、Project>Settings>C/C++ Build の「 Toolchains 」タブで「 Custom (arm-none-eabi-gcc)」 を選択します。
次のコード サンプルを使用してください: https://community.nxp.com/thread/351961 それらは箱から出してすぐに機能し、A9とM4の両方の日食プロジェクトがすでに含まれているためです。
Hello,
ライブラリの正しいパスを指定し、ファイルをインクルードする必要があるようです。
よろしくお願いします。
Yuri.
私はすでにそのドキュメントに従っていますが、その問題には役立ちません。これが今まで持っていたものです。
私はLinuxで作業しているので、Code Sourceryのものはインストールしませんでした、代わりに私は私がインストールしたgcc-arm-none-eabiで作業しています:
$ sudo apt-get gcc-arm-none-eabi をインストールするそのため、 cs-rm と cs-make を それぞれrm と make に変更する必要がありました。
そして、ダウンロードしたコードでEclipseプロジェクトを作成し、それを機能させるようにプロジェクトを構成することができましたが、それでも最初のエラーが発生しました。
main.c:8:19:致命的なエラー:stdio.h:該当するファイルやディレクトリはありません
#include
^
コンパイルが終了しました。
メーカー: *** [cortex_A9/main.o]エラー 1
cortex_A9/subdir.mk:24:ターゲット 'cortex_A9/main.o' のレシピ失敗 しましたそして、 プロジェクト>のプロパティ のインクルードディレクトリに 「/ usr / include」 を追加することで解決することができました。しかし、これがこのエラーを解決する正しい方法であるかどうかはわかりません。
このエラーを修正した後、新しいエラーが発生しました。
syscalls.c:168:1:エラー: 不明なタイプ名 'caddr_t' caddr_t _sbrk(int incr)そして、それを解決するために、私は明示的にファイル "/usr/include/x86_64-linux-gnu/sys/types.h"を含める必要がありましたが、それがそれを解決する正しい方法であるかどうかもわかりません。
さて、これらの2つのエラーを排除したので、次のエラーがあります。
建物対象:imx6-A9.elf
呼び出し: Cross ARM C リンカ
arm-none-eabi-gcc -mcpu=cortex-a9 -march=armv7-a -marm -mlittle-endian -mfloat-abi=softfp -mfpu=neon -mno-unaligned-access -fno-zero-initialized-in-bss -O0 -g -T "/home/mmalagon/iMX6/MX6SX_hello_MFG/cortex_A9/mx6slx.ld"-nostartfiles -Wl,-map,"imx6-A9.map" -o "imx6-A9.elf"./cortex_A9/main.o./cortex_A9/syscalls.o ./cortex_A9/uart.o
/usr/lib/gcc/arm-none-eabi/4.9.3/../../../arm-none-eabi/bin/ld: -lg が見つかりません
makefile:42: ターゲット 'imx6-A9.elf' のレシピ失敗 しました
/usr/lib/gcc/arm-none-eabi/4.9.3/../../../arm-none-eabi/bin/ld: -lc が見つかりません
collect2: エラー: ld が 1 つの終了ステータスを返しました
メーカー: *** [imx6-A9.elf]エラー 1私はそれを解決することができませんでした。
このエラーが、前の2つのエラーを解決した方法の結果であるかどうかはわかりません。
私は正しい方向に進んでいますか?または、LINUXでコードをコンパイルするために他にどのような考慮事項を考慮する必要がありますか?
助けてくれてありがとう。
Hello,
Eclipse の設定に関する一般的な考慮事項については、次の Web サイトを参照してください。
https://community.nxp.com/docs/DOC-103736
よろしくお願いします。
Yuri.
こんにちは
添付のコードをコンパイルするにはどうすればよいですか?次のエラーが発生します。
arm-none-eabi-gcc -g -Wall -fmessage-length=0 -o test.out *.s *.c -fno-zero-initialized-in-bss -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=softfp -marm -mlittle-endian -T mx6slx.ld -nostartfiles -Wl,-Map,test.map,--cref,-n
main.c:8:19:致命的なエラー: stdio.h:該当するファイルやディレクトリはありません
#include
^
コンパイルが終了しました。
syscalls.c:1:19:致命的なエラー: errno.h:該当するファイルやディレクトリはありません
#include
^
コンパイルが終了しました。
uart.c:14:0からインクルードされたファイル:
io.h:17:19: 致命的なエラー: stdio.h:該当するファイルやディレクトリはありません
#include
^
コンパイルが終了しました。
メーカー: *** [test.out]エラー 1
makefile:13: ターゲット 'test.out' のレシピ失敗 しました
私はそれをEclipseでコンパイルしようとしています。
ありがとうございます!
Hi Yuri,
ご協力いただき、誠にありがとうございます。
よろしくお願いいたします。
Hello,
「 A9経由でSRC_SCRにアクセスすることによってのみM4コアをリセットできました... ",
これは正しいです、CM4はCA9なしでロード/起動することを意図していません。
ブータブルSDについては、以下をご利用ください
Linuxコマンド
$ dd if=test_A9.bin of=/dev/sdb bs=512
また、次のもの-希望-が役立ちます。
ブータブルSDイメージのビルド方法(i.MX6 SLの場合を例)
よろしくお願いします。
Yuri.
こんにちは、ユリさん。
あなたの有用な投稿をどうもありがとう。
Jlink を使用して M4 コアをデバッグし、最初に A9 コアにアクセスし、Jlink コマンドを使用して一部のシステム レジスタを変更して M4 を有効にし、次に gdb デバッグ セッションを開きます。しかし、gdbデバッグセッションの開始/停止時にM4コアをリセットすることに関して問題が発生しました。A9経由でSRC_SCRにアクセスすることでのみM4コアをリセットできましたが、これはあまり便利ではないと思います。
IMX6SXベアメタルプロジェクトを使用してM4コアを有効にする別の方法として、M4のgdbデバッグセッションを正常に開始する前に、JlinkダウンロードA9バイナリイメージを使用しようとしました。次に、A9バイナリイメージを起動可能なSDカードにコピーしたいので、リセットボタンを押した後、そこでM4コアのデバッグを開始できます。
起動可能なSDイメージを生成する方法を教えてくれませんか、以下のコマンドで試しましたが、うまくいきません。
dd if=test_A9.bin of=/dev/sdb bs=513 seek=2
どうもありがとうございました。
よろしくお願いいたします。
そのドキュメントへのアクセスを許可するように地元のFAEに依頼することを提案します。
~イゴール
pptxプレゼンテーションにアクセスできず、リンクをクリックすると「この場所またはコンテンツへのアクセスが制限されています。これが間違いだと思う場合は、管理者またはここにあなたを案内した人に連絡してください。
どうもありがとう、イゴール!
Hi Alejandro
プレゼンテーション6SX_Cortex-M4_Development.pptx添付部分
以下のリンクで見つけることができます
SoloXの起動M4 &A9 & の停止M4を実行するだけで最小の電力
p.12 は0x007f8000 TCML のアドレス マッピングを示しています
よろしくお願いいたします
イゴール
わかりました!ありがとう、ユリ。
よろしくお願いします。
Alejandro
Alejandro, hi !
どうやら、公式文書も見つかりません
(例を除く) 0x007f8000アドレスマッピングについて。
よろしくお願いします。
Yuri.
素敵なドキュメントゆり。RMが0x007f8000エリアが予約されていると述べている理由をご存知ですか?
RDCとCSUについて詳しく説明する別のドキュメントがあれば素晴らしいと思います。