STM32について
Cerevoでは様々なメーカのMCUを使用していますが、汎用のMCUとして用いるものの一つとしてSTMicroelectronics社製のSTM32シリーズを使うことがあります。安価なARM Cortex-M0のSTM32F0シリーズに始まり、最近では Cortex-A7とCortex-M4のヘテロジニアスマルチコアでパフォーマンス豊かなSTM32MP1シリーズなど、スケーラブルなラインナップで非常に選択しやすい製品ラインナップがあります。
そんな中で、中国製のSTM32クローンチップの存在が指摘されています。数年前にOlimexのblogが話題になりました。
Chinese clones attack STM32 microcontrollers
https://olimex.wordpress.com/2015/11/09/chinese-clones-attack-stm32-microcontrollers/
ちょっと興味が湧いたのでクローンチップについて調べてみることにしました。STM32はその中でも、私の個人的な感覚としてよく使われる型番に偏りががあり、STM32F103C8T6をよく見かける気がします。これをターゲットにクローンチップを調査してみることにしました。
xx32F103C8T6
一般的な半導体の命名規則として、先頭の数文字でメーカ名を示し、続くその後にシリーズ名や定格、パッケージなどの情報を各メーカが各々の英数字で与えることが多いと思います。クローンチップでは先頭こそそれぞれのメーカ名を与えているものの、その後の型番についてはオリジナルのSTM32と全く同一の命名規則を使っているようです。
そこで、xx32F103C8T6の型番を持つクローンチップをざっと比較してみたものが以下の表です。MCUコアやフラッシュメモリ、SRAM、ペリフェラルなど目ぼしいスペックは全く同じに揃えてきていますが、最大動作周波数や電源電圧に各メーカのオリジナリティを感じます。なぜちょっと背伸びをしたのか。

STM32 vs GD32
この中から最近話題のGigaDevice社のGD32F103C8T6とSTM32F103C8T6を詳しく比較してみます。余談ですが GD32VF103は コアがRISC-Vなので よく似た別物です。そのうち試してみたい。
データシートより、Pinoutの図を拝借します。

電源ピンや特殊機能のピンは同じ場所へ割り当てているようです。ということは、少なくともポン付けで置き換えても何らかの動作はしそうです。タイマに関するピンやUSART等も合わせているようです。バッチバチに意識してますね。
続いて、メモリマップはどうでしょう? 書き方が異なるので少し見づらいですがペリフェラルに関するレジスタマップを拝借してきます。それぞれメモリ上のアドレス範囲と対応するペリフェラルを示しています。

似ているものの、少しづつ違いがあることがおわかりいただけるでしょうか?reservedとなっている領域を比較するとわかりやすいかと思います。GD32はSTM32では予約されている領域にもレジスタを割り当てているようです。
試しにGPIOのPort Aレジスタを覗いてみましょう。これは何れのチップであっても同じアドレス(0x4001 0800)に位置しています。その中身にはどのような違いが見られるでしょうか。

あれ? 完全に同じに見えますね。部分的にならば同じオブジェクトコードで動いてしまいそうです。しかしながら、ペリフェラルによっては異なる部分もあるので、全く同一のバイナリで動くかというと……どうなんでしょう?
CKS32F103C8T6
ひょんな事からクローンチップの載ったボードを手に入れました。通称Blue pillと呼ばれるSTM32F103の載ったボードのコピー品のようです。


さて、これを動かしてみましょう。通常のSTM32開発時と同じ用にCubeIDEでプロジェクトを作ります。オンボードのLEDを使って単純なLチカコードを書いてビルドしました。それでは、ST-Linkを繋いでデバッグを始めましょう。このボードにはリセットピンが出ていないのでデバッガがアタッチするタイミングを見計らってボード上のリセットボタンを押すとアタッチできます。
すると、こんなエラーが出てきました。

一筋縄ではいかないようです。そこで、ST-Link Utilityを使用してみます。

先程CubeIDEで書いたLチカプロジェクトからhexファイルを出力してこれを書き込んでみます。

すると、リセットがかかって

という事でシンプルなLチカプログラムは動いてしまいました。GPIO以外の他のペリフェラルが同様にSTM32と同じバイナリで動くかどうかは追々検証してみようと思います。それでは。
本記事は、Cerevoスタッフが業務や趣味について思うままに書き綴るアドベントカレンダー企画「Cerevo アドベントカレンダーTechBlog 2019」の第20日目です。
Cerevo アドベントカレンダーTechBlog 2019
https://tech-blog.cerevo.com/archives/category/adventcalendar/2019/
著者プロフィール

- 動くおもちゃがすき.アナログ回路屋です.
最近の投稿
01. ハードウェア2019.12.20100%オリジナルで高品質新しいSTM32F103完全に交換自由な船積み
01. ハードウェア2018.12.21[21日目]激安中華USBマイコンは使えるのか
01. ハードウェア2016.12.20[20日目] 基板を起こしてモータを動かそう
01. ハードウェア2015.12.20[20日目] DOMINATOR MAXI を魅せる基礎技術