2016-11-01 3 views
1

私は何らかの種類のブートローダを開発してフラッシュすることができます(ブートローダーをMCUに置くとそう呼ばれるのですか?)、恐ろしく動作します。 、永久に?悪いブートローダはマイクロコントローラをレンガできますか?

私が求めているのは、STM32F407用のブートローダを開発することです。問題は、私はブートローダーや何らかのものについて何も知りません。つまり、私はたくさんのことを学ぶ必要があります。 私はどんな答えにも感謝します、ありがとう!

答えて

1

一般的に、絶対に、私はレンガの付いたマイクロコントローラのコレクションを持っています。毎回、私は怠け者になり、別のものがあります。

これは、お使いのマイクロコントローラやファミリに特有のものです。たとえば、ピン数は非常に重要です。マイクロコントローラがインサーキット(またはプログラミングフィクスチャ)の特定のピンに依存していて、ソフトウェアによってそれらのピンを再利用できる場合は、得られる限り多くの利点があります。例えば、gpioピンでもよいjtagピン。何らかの理由でコードがgpioピンとして使用され、チップがリセットされたときにjtagインターフェイスを使用できないように設計されています。

もう1つの非常に簡単なのは、一般的にPLLまたはクロックです。 /を使用してクロックシステムを初期化するコードを開発する場合(チップベンダ提供のコードを使用しても、そうすることを前提としています)、チップを適切に初期化されていないクロックに切り替えるか、それはレンガの可能性があります。

いくつかのチップデザインは、多くの場合、さまざまな方法であなたを助けます。 AVRファミリには一般に、チップがリセットされている間に起こるプログラミングモードがあります。つまり、フラッシュ内のどのコードでも機能に影響を与えないようにリセットに関連しています。ボードのデザインを悪くすることはできますが、それは働くことから。もう1つの方法は、ブート機能専用の「ストラップ」ピンであり、片方の通常のブートを設定し、もう一方のブートをブートローダに代入します。これはstm32のboot0とboot1に依存します。あなたがチップをレンガしている場合(pll/clockまたはgpioとして使用してSWDピンをめちゃくちゃにした場合)、あなたは単にboot0を変更し、内部ブートローダにブートしますAFAIKあなたがうんざりすることができます)は、動作することが知られています。そのブートローダから、SWD(今はレンガではないチップ)またはブートローダ自体(常にシリアル、時にはusbやその他がサポートされている)を使用することができます。 NXP同様の取引。 SAM-BAを持っていたAtmel ARMは、今ではSWDをサポートしています.Sambaコードを取得してフラッシュにロックしようとしますが、そのフラッシュを解除するのは簡単すぎます。彼らは失敗する。

システム設計の一環として、これらのいずれかをビルド機能(STM32のboot0など)から保存しない場合は、追加することをお勧めします。非常に初期のコードは、gpioピンが片方向に引っ張られていれば、専用のgpioピンをストラップとして初期化し、無限ループで回転させたり、バグのないコードにすることができます。あなたがプロジェクトを間違ってビルドしてこのコードをゴミ箱に入れないことを完全に保証するわけではありませんが、レンダリングできるペリフェラルを使って作業するときには、少なくともブートローダ/プロジェクトを開発し、

部品から煙を出すことは、レンガの別の方法でもあり、時には起こる可能性があります。

STM32を起動する方法やSTのさまざまなコードを出発点として使用できる例がたくさんあります。 (すべてが様々な品質のもので、あなたが支払うものを手に入れます)。彼らのドキュメントは、競争のいくつかよりも優れており、缶詰のライブラリを使用しようとするよりも時には簡単に、周辺機器を起動して設定することはまったく困難ではありません。 YMMV、さまざまなソリューションを試す必要があります。しかし、これを初めて知っているならば、レンガ造りは可能性が高いです。幸いにも、あなたのボードデザインがboot0ピンを打ち破る限り、レンガを傾けることができるチップがあります。 STM32のプロトタイプボードでは、boot0ボタンとリセットボタンがあり、リセットするだけでチップがリセットされ、実行され、boot0を保持してリセットを押すと、ブートローダに入ります。この作業のために必要に応じて両方を右プルアップまたはプルダウンで適切に配線する必要があります。またはジャンパーがboot0を直接高低にしてからポップリセットすると、時間がかかりますが動作します。

+0

非常に徹底的な回答、ありがとうございます。私はあなたの答えを受け入れ、開発する際には非常に慎重にします。乾杯! – jmkjaer

3

簡単に言えば、ブートローダでマイクロコントローラをブリックすることはできません。エンドブートローダで だけで、ファームウェアで、フラッシュを消去SWD 経由でプログラマを使用して離れて消去することができ、あなたのコントローラが状態を回復したことがないマイクロコントローラの新しい

+0

はい、正解! ...そしてAFAIKのSTMにはブートローダ(ROM領域に組み込まれている)が組み込まれているので、なぜ別のものを書くのはなぜですか? –

+1

@groenhen STMのプロトコルを使用してデフォルトインターフェイスを超えているICPの種類には、カスタムブートローダが必要です。あなたのファームウェアが暗号化されているか、またはいくつかのWiFiインタフェースを経由している場合 – JimmyB

+0

@JimmyB:はい、同意しますが、カスタムブートローダは別の話です。しかし、OPは、ブートローダ経由でマイクロをブリックすることが可能かどうか尋ねました。答えは簡単です:たとえあなたが設定/ヒューズなどで遊んでいても、コントローラを単にプログラマで消去するだけでコントローラを回復することができます。いったん私はRC発振器(ext.circuit)ともちろんAVR-ISPプログラマを使ってAVRを(CLKヒューズで再生した後に)再生しました。 –

1

はいすることができますレンガと同じくらい良いです。私はこれをして、私はSTM32F427でそれをやった。

ブートローダは、Clock、Peripharals、Interruptsの優先順位を注意深く選択しています。これを行うと、コントローラーをレンガする機会が少なくなります。また、いくつかの企業が独自の情報を保存してJTAGラインを爆破するために、コードをリリースする前にすべてをテストしてください。プログラムの唯一の方法はBootloader経由であり、完璧ではない場合は、コントローラをレンガするだけです。

関連する問題