制御系なら俺に聞いてもいいぞ(4)

このエントリーをはてなブックマークに追加
929デフォルトの名無しさん:04/03/04 22:08
>>927
基本だろ
>>928
Vなやつですか?
931927:04/03/05 20:52
>>929
いや、あとで割り込みが追加されたもんでね
932デフォルトの名無しさん:04/03/06 21:15
Cから簡単にフラッシュから読みだしたプログラムをコールできればよいんだけど。
フラッシュから読み出すメモリ空間をコンパイルオプションで指定する方法ない?
やっぱりアドレスは意識しないといけないのかな?
>>932
自分の場合は、COFFの集合を指定したら一つのHEXファイルを作るツールを作ってる。でも、
ツールによってはリンカーオプションでロードアドレスと、ROMアドレスを設定出来ると思うが?

同じ番地に配置するなら、main()を含むモジュールを複数作れば速いと思う。
934デフォルトの名無しさん:04/03/07 00:39
Cのコードから引数、戻り値を渡せたり、グローバルを共通に使えたら便利なんだけど。
main()を複数作り込んでフラッシュに放り込むしかないのかな。
とりあえず、先頭番地に main(相当)への相対分岐命令を置いて
mainの引数を渡せばいいでしょう。

グローバルを使いたい場合は、mapファイルからグローバル変数のリストをアセンブラコードに出力させて
それをリンクすると・・・

結局はアセンブラ使わないと難しいね。
リロケータブルファイルにして、読み出し側でリロケーションするのが最強。
セクション名を同じにしておけば、グローバル変数を共通にもできるし。


って、実際やってる。ちょっとしたDOSモドキ。
>>936
あ、放り込んでるのがnand flashなんで、こんなことしてマス。
938デフォルトの名無しさん:04/03/08 21:57
ハードチェック用のソフト作ってます(基盤が正常に動作しているかどうかの確認)
で、よくわかんないことがあるんですが、一般的には
メモリ関係は全アドレスに書き込んでみて、読んで同じ内容が見えるとOKとする
のが普通でしょうか?
あとポート関係のチェックなんですけど、オンオフしてLEDが点灯、消灯すればOK
としたいところなんですけど、ポートがえらいたくさんあって、さすがにポートの数だ
けLEDつけてらんないんですけど、どのようにチェックしたらいいでしょうか?
ちなみにSIO使ってのPCとの通信はできるのでモニタの使用もできます。
チェックし過ぎて回数制限のあるものとか寿命終わらすなよ
>>938
ほかにもjigを作って繋げたり
>>938
昔アーケードのゲームでやってたRAMチェック
1.RAMを0x55で埋め尽くす
2.先頭番地から0x55かチェックしながらそのアドレスに0xAAを書き込む
3.先頭番地から0xAAかチェックしていく

ポートについてはアウトポートがどんだけあるのか知らないが
PC側に同じ本数で電圧レベルが合う入力ポート用意して
SIOに向けてコマンド送ってPCでポートのパターン比較するとか。
そんでエコーバックでSIOの確認もしておくとか。



>>938
メモリ関係のチェックは、バスラインの錯綜を検査するために
0x55aa55aaを書いてみるなどの工夫が必要。
どこまでやるかはケースバイケース。
DRAMの場合はリフレッシュ動作のテストも必要
リフレッシュ回路が動作してなくても
平気で数十秒ぐらいはデータ保持してしまうものもあるので
実際にリフレッシュ止めてどのくらいの時間で
データ化けするか実験するのがよい
俺が昔やったときは1分あれば大抵化けてたけど
最近のはもっと長く保持してしまうものもあるかもしれない
944デフォルトの名無しさん:04/03/09 07:35
そんなにDRAMは放置プレーに強いのか。。。
知らなかった
SRAMしか使ったことないけど
>>942
同じ値を書いちゃmsb側のアドレス線が切れたりしてたらダメでしょ。
アドレス値と大きな素数を掛け算して下位ビットを取るとか、
M系列を順に書いておくとか
55とAAを書いて読むのは基本だけど
読むときに書いた直後だとキャッシュに残ってて
書けてなくても読めたことがあって
あのときは俺はもう限界だと思った
書いて直後に読んだらキャッシュなくてもメモリもIOも何も繋がってなくても 書いた値が読めるよね
よめる。
使ってるCPUをはっきりしる>938
読みだししかできないポートの場合どういう確認がいいでしょうか?
グランドに接続してスイッチでショートして読み出してみるっていうのがあるんですが、もっといいやり方ないでしょうか?
>950
基盤にポートチェック用の冶具とか接続できるんなら
出力ポートと入力ポートを接続して、出力値=入力値であるかどうか
判定すればいいんじゃない?

u-com 冶具
----------+ +--------
IN PORT|<--------|---+
| | |
OUT PORT|-------->|---+
----------+ +--------
こんな感じで。
>>951
もちろん一部そうしてますが一部折り返せない部分があるのでそこをどうしようかなと思って。
>>947
そりゃバスがフローティングになってるんじゃないのか?
>>952
セレクタなりパラシリなりを入れるとか
必要ならDACやマイコンおごる時もあるし
>>944
SRAMなら数秒間電源OFFしても
データが残ってるのを経験したことがある。
データ保持するだけならコンデンサに残ってる程度で賄えてしまうようだ
>>953
何も繋がってないって書いてあるだろ
書いてスグに読めば読めるのは、1チップ系のマイコンでROM内蔵とかでないと
プログラムを外付けメモリから実行してる場合はそっちがバスに残ってしまうね。

>>938
 製造ラインテストかどうかでも違ってくるよ。

メモリの場合は >>941 の方法だと、アドレスデコーダの上位が死んでたりアドレスバスがショートや切れてても
正常と判定されてしまうから、
  やはり疑似乱数を順に全て書いてから先頭から同じ疑似乱数を発生させながら比較してゆくべきだ。

それから、初めてのボードテストだと、
書き換え可能ROMの場合は 他のライターでこの疑似乱数を書いておいて
それと比較するのを最初にやっておかないと、アドレス・データバスの配線ミスが発見出来ない。
RAMの場合は、ミスってても問題ないけどね。

ポートの場合も、初めてのボードテストだと
 出したのを読むだけじゃ、ビット位置のミスが発見出来ない。
1本づつ試験することが一度は必要だ。

それと1本づつ試験する時に、そのポート1本だけ見てたんじゃダメだ。ショートの可能性もあるから、
関係ないポートも全部確認しなくちゃいけない。
958953:04/03/10 12:47
>>956
何も繋がってないのは分かるよ
その上で、pull-up(down)しないでHi-Zのままだからだろってことなんだが
別にpull-upしろと云ってるわけじゃないよ
>>958
プルアップしても、バスの寄生容量が数10Pあると書いて直後の読み返しなら読めてしまうね。
よめるよめる
入力ポートをプルアップせずにオープンにしておくと壊れるよ。
プルアップで確実に1が読めることを保障させようとしたら
よっぽど抵抗値を小さくしないと駄目だよな
そうすると電源にもバスドライバにも負担かかってしょうがない

あ、CPUのクロック充分遅くすればOKだw
>>961
今時のCMOSICは保護ダイオードでしっかり守られてるから、アンテナになりそうなものつないでなければそういう事はないよ。
バスに入れるなら、プルアップというより反射を抑える為のターミネータ抵抗だね。
バスが速いと、上下に入れたくならない? 
ハード屋さん多いね、ここ
いや、ハード屋とやりあう為に知識を仕入れたソフト屋ですが?
食うか食われるかですな(w
968デフォルトの名無しさん:04/03/10 23:13
俺はハード屋とソフト屋の確執は知らない。
なぜなら、俺はハードもソフトもやるから。
と言っても、デジタル回路だけだから、FPGAの外のことだと、文句つけまくりなんだけどねw
969デフォルトの名無しさん:04/03/10 23:29
びみょーに知ったか君も混じる今日この頃
970961:04/03/10 23:43
>>963
だからといって、プルアップ抵抗付けなくて良いことはない。
消費電流は増えるし、ノイズに弱くなる。
・・・ていうか、本気じゃないよね?
971デフォルトの名無しさん:04/03/11 05:12
>>970
プルアップしないと消費電流も増えるのですか?
電池で動かすような場合は、気になるよね。プルアップしないと電流が読めない。
>>961の壊れると >>970とは大分違うと思うが?

>>971
昔 CMOSICは電源電圧範囲が広かったんだ。
だから中間の電圧になると上のFETと下のFETの両方がONして貫通電流が大きく流れるのを防げなかった。
何mAも流れたんだよ。

今は3.3Vとかにほぼ固定だから、中間電圧になってもそう大きな貫通電流は流れない。
でも、CMOSのメリットはクロックを止めたら殆ど電流が流れない事だから、その場合には問題。
もっとも、そういう電池駆動をするような場合は、殆ど1チップマイコンが使われるから、
入力専用ポートは割り込みポートとか以外には、殆どないよね。
974970:04/03/11 08:10
>>973
入力ピンをプルアップしなくてもすぐには壊れないけど、
消費電流が増えたりして発覚するということ。
そのままにしておけばストレスがかかるし、ノイズや静電気がかかると壊れるよ。
ていうか、空き入力ポートをプルアップ処理するのは基本じゃん。
最近のCPUはプルアップ抵抗内蔵のものがあるから、無くても大丈夫だと思ってないか?
・・・みんな、ネタだよね。
975974:04/03/11 08:27
>>974
ネタに決まってるだろ。気付いてないのはお前だけ
ふつうプルダウンしないか?
>>974
だからさ、10cmもアンテナを付ければそりゃ壊れる事もあるけど
そのままにしてたらノイズや静電気で壊れるというのはどういう理屈だ?

昔なら >>975のリンク先に書いてある事も真実だった。
しかし、現在の一チップマイコンやLSIでは正しくない。

 1、中間電位で素子の内部貫通電流が流れる
   −>しかし、最近の3.3V系では壊れる程は流れない

 2、入力端子は、極めてハイインピーダンスなので、高圧になる
   −>保護ダイオードが入っているので電源±0.6V以上ではローインピータンスになる

昔の4000系のCMOS-ICでさえ、入力をOPENにしても5V電源なら壊れはしなかった。
それどころか、インピータンスが高い事を利用して、アンテナ付けてセンサー代わりに使ったほどだ。
それでも壊れはしなかったよ。(もちろん直列抵抗は入れてたけどね)

ノイズや静電気で壊れる程の電圧がかかったら、それを保護出来るプルアップ抵抗はいくらだと?
結局保護する為にならプルアップするより、電源とショートしてしまえよと。