nic-segawa
2019年2月22日 18時25分
お世話になっております。
シリアルインターフェイス1(ttymxc1)をコンソール出力と外部機器とのRS-232C通信兼用で使用しています。
通信が干渉を避けるため、起動後のコンソール出力は停止するように/etc/inittab内で以下のようにコメントアウトしています。
#::respawn:/sbin/getty -L 115200 ttymxc1 vt102
ブートローダー動作中は起動ログが出力されています。
この時に、外部機器が接続されていない場合は40sec程度で起動します。しかし、外部機器を接続した状態だと起動に2~3分程度掛かる場合があります。(起動中に外部機器から何か送信して来ることはありません)
また、その際の起動ログの内容も異なります。(それぞれの起動ログを添付させて頂きます)
ブートローダー動作中のコンソール出力も停止すれば外部機器を接続した状態でも40sec程度で起動します。(これで解決はしますが、ブートローダーへの変更適用が煩雑となるので、可能な限り避けたいです)
なぜこのような現象となるのか、対策はあるのか、教えて頂けないでしょうか?
よろしくお願い致します。
ファイル | ファイルの説明 |
---|---|
起動ログ(外部機器接続時).txt | |
起動ログ(外部機器未接続時).txt |
コメント
nic-segawa
at_mizo
nic-segawa
at_mizo
nic-segawa
nic-segawa
溝渕様
オシロスコープで確認した所、Linuxの動作開始のタイミングで外部機器のTxにスパイク状のピークが数回入っていました。
起動ログ出力を切るとこのピークは消えていましたので、これが原因になっている可能性が高いです。
外部機器のプログラムでは送信処理を行っていないので、外部機器側のプログラム変更で防ぐことは難しそうです。
起動中にArmadilloに対して信号が入ることで今回のような現象は出るものでしょうか?
Armadillo側で対策する方法は無いでしょうか?
とりあえず現状、2~3分待てば起動しますので、この程度の時間であれば起動後の動作に支障が無いのであれば問題無いです。
at_mizo
溝渕です。
> オシロスコープで確認した所、Linuxの動作開始のタイミングで外部機器のTxにスパイク状のピークが数回入っていました。
> 起動ログ出力を切るとこのピークは消えていましたので、これが原因になっている可能性が高いです。
外部機器のTxのみ切断することは可能でしょうか。
現状、次のように接続されていると思いますが、
Armadillo Tx ------ Rx 外部機器
Rx ------ Tx
次のように外すことはできますか。
Armadillo Tx ------ Rx 外部機器
Rx Tx
これができると、それぞれをオシロスコープで確認することによって、スパイ
ク状のピークをどちらが出力しているかがわかります。
> 起動中にArmadilloに対して信号が入ることで今回のような現象は出るものでしょうか?
> Armadillo側で対策する方法は無いでしょうか?
現在までに判明している情報からだけでは、思い当る対策はありません。原因
が明確になれば対策は可能と思います。
nic-segawa
at_mizo
溝渕です。
ご確認有難うございます。
ここまでの現象を纏めると、
1. Armadilloの起動ログの出力を受けた外部機器が、スパイクノイズを発生させる
2. Armadilloはスパイクノイズの影響で、起動が遅くなる
のようになると思います。
外部機器に変更を加えることができないとなると、Armadilloで対策するしか
無いと思います。
そのためには、なぜArmadilloの起動が遅くなるかを調査する必要があります。
まず、外部機器が出力するノイズの波形を(オシロスコープの画面キャプチャ
等で)教えていただけますか?
1画面に収まらない場合は、ノイズの発生頻度も合わせてご教授ください。
nic-segawa
溝渕様
オシロスコープの画面キャプチャを添付させて頂きます。
Linuxの起動中、画面と同じような頻度でずっと発生していました。
よろしくお願い致します。
ファイル | ファイルの説明 |
---|---|
TEK0001.png |
at_mizo
nic-segawa
at_mizo
nic-segawa
溝渕様
調査頂きありがとうございます。
ひとまずパルス幅が分かる波形を添付します。
パッチの方は作成後に添付致します。
ファイル | ファイルの説明 |
---|---|
TEK0000.png |
nic-segawa
溝渕様
ファイル数が多くなりましたが、変更箇所のpatchファイルを添付します。
この他、カーネルコンフィギュレーションを以下の通りに変更しています。
Linux Kernel Configuration
System Type
Freescale MXC Implementations
MX25 Options
Armadillo-400 Board options
以下チェック入れる
Enable UART3 at CON11
Enable I2C2 at CON14
Enable SPI3 at CON9
Enalbe SPI3_SS0 at CON9_16 (NEW)
Enalbe SPI3_SS1 at CON9_18 (NEW)
それ以外はチェック外す
Device options
以下チェック入れる
I2C1 module
eSDHC1
PWM1
PWM3
それ以外のチェック可能箇所はチェック外す
Device Drivers
SPI support ←チェック入れる
Bitbanging SPI master ←チェック入れる
MXC CPSI controller as SPI Master ←チェック入れる
User mode SPI device driver support ←チェック入れる
Block devices
Default RAM disk size (kbtes) ←80000に設定
よろしくお願い致します。
at_mizo
nic-segawa
溝渕様
詳細に調査頂きましてありがとうございます。
オシロスコープのキャプチャ画像を添付します。
よろしくお願い致します。
ファイル | ファイルの説明 |
---|---|
TEK0002.png |
at_mizo
nic-segawa
溝渕様
調査頂きありがとうございます。
新しく分かったことがありますので、お知らせさせて頂きます。
スパイク状のノイズは毎回出るのですが、実際に起動が遅くなる際は挙動が異なりました。
起動が遅い際の起動ログを添付します。
途中からBL(0x07)が出力され続けています。
また、スパイク状の短い信号に加えてより長い時間の信号が出ていました。(キャプチャー画像添付します)
短い信号と長い信号が交互に出ていました。
起動が完了するまで継続していました。
これで何か分かりますでしょうか?
ファイル | ファイルの説明 |
---|---|
起動ログ.txt | |
TEK0003.png |
nic-segawa
溝渕様
念のためにArmadillo-410開発キットを使用した際にも現象が起こるかの確認をしてみました。
試した所、3回目の起動で現象が起こりました。
ブートローダー、カーネル、ユーザーランドは以下を変更しない状態で使用しました。
・ブートローダー:loader-armadillo4x0-v2.4.0.bin
・カーネル:linux-2.6.26-at29から作成したlinux.bin.gz
・ユーザーランド:romfs-qt-20121105.img.gz
setenvコマンドでRAMDISKのサイズを61440KBに変更しています。
よろしくお願い致します。
at_mizo
nic-segawa
nic-segawa
at_mizo
溝渕です。
回答が遅くなり申し訳ございません。
Armadilloの起動中にBL(0x07)を受信し続けることで、起動が遅くなる現象が
確認できました。
他の文字、例えばG(0x47)でも同様の現象が確認できた為、恐らくUART受信お
よびループバック処理に時間がかかっているものと思います。
この場合、console停止がスマートな回避方法になるかと思います。
保守モードで、以下のコマンドを入力後に動作確認いただくことは可能でしょうか。
hermit> setenv console=none
元の状態に戻す為には、以下のようにコマンドを入力します。
hermit> clearenv
nic-segawa
溝渕です。
原因の調査、ありがとうございました。
コンソールの停止で起動が遅くならないこと確認できました。
コンソールを停止した際の動作に関して以下の2点質問させてください。
・コンソール停止時に起動ログがLCDに表示されるようになりました。別の画像を表示させているので、止めたいのですが、可能でしょうか?
カーネルコンフィギュレーションで以下の設定項目のチェックを外しましたが、止めることができませんでした。
Device Drivers --->
Graphics support --->
Console display driver support --->
<*> Framebuffer Console support
[ ] Map the console to the primary display device
・環境変数の変更では無く、ブートローダーのソースコード変更等でコンソールを停止できないでしょうか?
環境変数の変更は1台ずつの対応が必要になると思いますが、ブートローダーの変更であればROMイメージ書き込みサービスで対応済みのデータを書き込んでもらうことで対処できるので、その方が容易になります。
よろしくお願い致します。
at_mizo
溝渕です。
> ・コンソール停止時に起動ログがLCDに表示されるようになりました。別の画像を表示させているので、止めたいのですが、可能でしょうか?
> カーネルコンフィギュレーションで以下の設定項目のチェックを外しましたが、止めることができませんでした。
>
> Device Drivers --->
> Graphics support --->
> Console display driver support --->
> <*> Framebuffer Console support
> [ ] Map the console to the primary display device
上記で正しいと記憶していますが、停止しませんか?
イメージのビルド/書き込みが正しく行なわれていることを確認してみてください。
> ・環境変数の変更では無く、ブートローダーのソースコード変更等でコンソールを停止できないでしょうか?
可能です。
hermit-atのmenuconfig画面で、Consoleの値を"ttymxc1"から"none"に変更し
てください。
Target Configurations --->
Support Devices --->
Console (ttymxc1) --->
nic-segawa
at_mizo
2019年2月22日 18時44分
溝渕です。
> この時に、外部機器が接続されていない場合は40sec程度で起動します。しかし、外部機器を接続した状態だと起動に2~3分程度掛かる場合があります。
外部機器を接続するかどうかで挙動が変わるため、外部機器が何をしているのかが気になるところです。
> (起動中に外部機器から何か送信して来ることはありません)
外部機器から何も送信しないことは、どのように確認されましたか?外部機器のTX(ArmadilloのRX)の波形の確認でしょうか?