圏9研究所 工作室

圏9研究所の開発情報資料など

STM32F103 clone & BluePill その5:SWD IDCODEコンバーター

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

flash

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 を書き込む

% openocd -f interface/stlink-dap.cfg -f target/stm32f1x.cfg -c "program /Users/xxxx/STM100_IDE.elf verify reset exit"
Open On-Chip Debugger 0.12.0
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
Info : auto-selecting first available session transport "dapdirect_swd". To override use 'transport select <transport>'.
Info : STLINK V2J41S7 (API v2) VID:PID 0483:3748
Info : Target voltage: 3.265209
Info : Unable to match requested speed 1000 kHz, using 950 kHz
Info : Unable to match requested speed 1000 kHz, using 950 kHz
Info : clock speed 950 kHz
Info : stlink_dap_op_connect(connect)
Info : SWD DPIDR 0x1ba01477
Info : [stm32f1x.cpu] Cortex-M3 r2p1 processor detected
Info : [stm32f1x.cpu] target has 6 breakpoints, 4 watchpoints
Info : starting gdb server for stm32f1x.cpu on 3333
Info : Listening on port 3333 for gdb connections
[stm32f1x.cpu] halted due to debug-request, current mode: Thread 
xPSR: 0x01000000 pc: 0x080008e4 msp: 0x20005000
** Programming Started **
Info : device id = 0x000fa410
Info : flash size = 64 KiB
Warn : Adding extra erase range, 0x08002260 .. 0x080023ff
** Programming Finished **
** Verify Started **
** Verified OK **
** Resetting Target **
shutdown command invoked

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文字に短縮

STM32 ID A01:2BA01477
E0042000:000FA410
1FFFF7E0:FFFF0040
E00FFFD0:00000004
E00FFFE0:000000C3
E00FFFE4:000000B4
E00FFFE8:0000000B

DBG:000FA410
Flm:0040
4KB:00
JEc:04
PNu:00C3
JID:04

3)SWD起動とメモリー内容読込シーケンス例

※1 内部電源ONしないと動かない

4)SWDコード一覧

()はビット並び順反転した値でデータ受信処理スピードアップのために使う

次は、処理速度アップを期待してSTM32F103に移植してみます