1.概要
クローンチップはIDCODEが異なるため cfg ファイルを修正してopenOCDで書き込めるようになりました
次に cfg ファイルを修正しなくても使えるようにSWDで交信するIDCODE等を変換するコンバーターを作ってみます
2.構成
MINI ST-LINK V2 とターゲットボード間のSWD信号に割り込んでIDCODEを変換する
3.回路図
4.ソフト
1)ソフト仕様
ST-LINKで交信するSWD信号についてクローンチップからのIDCODE等を純正チップのコードに変換して返す
それ以外のコードについては変換しない
2)変換コードデータ一覧
種類 |
address |
変換値 |
備考 |
SWD IDCODE |
CMD=0xA5 |
0x1BA01477 |
|
DBGMCU_IDCODE |
0xE0042000 |
0x20036410 |
AT32F403A用 |
CPUID |
0xE000ED00 |
0x410FC230 |
↑ |
0xE00FFFD0 |
0x00 |
|
|
0xE00FFFE0 |
0x10 |
|
|
0xE00FFFE4 |
0x04 |
|
|
0xE00FFFE8 |
0x0A |
|
3)おまけ
・EUAERTからIDCODE等を送信する
SW-ONでターゲットボードに実装されたチップのコードをSWDで取得し送信する
・11520bps
4)PIC16Fリソース MCCで設定
5)状態遷移
6)SWD信号チャート
7.実装
秋月
・[M-01242] 小物収納ケース(緑) KCB-B
・[P-12853] 片面ガラスコンポジット・ユニバーサル基板 小物収納ケース(KCB-B)用
8.動作
1)openOCDでの書込み結果
Home directory の STM100_IDE.elf を書き込む
2)動作状況
・Info : SWD DPIDR 0x1ba01477 変換されている
・Info : clock speed 950 kHz
ただし、コード変換すると25kHz迄が限度のためコードチェックは書き込みとは別に低速で行っていると思われる
デバッグも含め詳細未確認
・** Verified OK ** とりあえずターゲットの動作もOK
9.参考資料等
1)回路について
・SWDIOラインのアナログスイッチは MOSFET BSS138(秋月の安い方)2個で構成
特性グラフで見るより電圧降下が大きいが使えるレベル
MOSFETはオンセミ製の方がいいかもしれない
2)ソフトについて
・コード変換時のSWCLK周波数のクリティカル処理はSWDIO送受信切替のところ
クロック立ち上がり、立ち下がり切替時にいろいろと判定処理が必要になるがクロック半波での処理になる
・PIC16F18313はおまけのIDCODE等送信を追加するとコンパイル最適化してもプログラムメモリー容量がほぼ100%
・おまけの動作例
以前書いたコード類をデコードして送信
コード名称はプログラムメモリーが足りないので3文字に短縮
3)SWD起動とメモリー内容読込シーケンス例
※1 内部電源ONしないと動かない
4)SWDコード一覧
()はビット並び順反転した値でデータ受信処理スピードアップのために使う
次は、処理速度アップを期待してSTM32F103に移植してみます