ubuntu 16.04 LTS のkicad

By 酔漢 - Last updated: 水曜日, 3月 28, 2018

しばらくの間、ubuntu 16.04 LTSのkicadを使っていました。しかし、これは不都合があったので、結局kicadの公式が推奨するPPAからのインストールに変更しました。

Read the rest of this entry »

Filed in 日記

Jupyter Notebookで音を出す

By 酔漢 - Last updated: 土曜日, 3月 17, 2018

Google Colaboratoryは大変魅力的なサービスです。しかしながら、その魅力を支えているのはサービスがクラウド上にあるということです。ということはColabで作ったデータもクラウド上にあります。

そのデータを音として聴くことはできないものだろうか、と思って調べました。結論から言えば聴くことができます。

Read the rest of this entry »

Filed in Jupyter

Jupyter NotebookをホスティングするGoogle Colaboratory

By 酔漢 - Last updated: 水曜日, 3月 14, 2018

昨年の今頃、「Jupyter Notebookがすごい!」と騒いでいたのですが、ツイッターでフォローしているD*isuke.Yさんから面白いサービスを知りました。GoogleがColaboratoryという名前でJupyter Notebookをホスティングしています。

Read the rest of this entry »

Filed in Jupyter, 日記

RFワールド ワークショップ&ミーティング

By 酔漢 - Last updated: 土曜日, 3月 10, 2018

表題の会合に行ってきました。RFワールド誌の創刊10周年だそうです。

TTさんの講演が目当てでしたが、結果的に大変刺激を受けました。

Read the rest of this entry »

Filed in 日記

クラスライブラリ、一段落

By 酔漢 - Last updated: 水曜日, 3月 7, 2018

ここのところ時間をかけていたSTM32 HAL用のクラスライブラリですが、一応の完成を見ました。

ちょこちょこと気がついては直し、気がついては直しをしていますが、doxygenのコメントも書き終わっており、基本的には私の中では「つくる」から「つかう」へとシフトしました。まぁ、SPIのタイミング測定なんかは必要ですけどね。 Read the rest of this entry »

Filed in 日記

ARM Thumbのunwindにもやもやする

By 酔漢 - Last updated: 土曜日, 2月 17, 2018

最近、STM32マイコン用のクラス・ライブラリを作っています。

もともとの動機は、STM32のHALを使うのがやや煩雑なのでこれを包み込んで使いやすくしようというものです。下回りはちゃんと地ならししておかないと、自分がほんとうに実装したいアルゴリズムに集中できなくなってしまいます。

Read the rest of this entry »

Filed in 日記

C++11 の調査に使うPDFファイル

By 酔漢 - Last updated: 月曜日, 2月 5, 2018

毎度毎度同じことを検索しているのでメモ代わりにここに書いておきます。

C++11のISO標準は有料です。しかし、この有料版(公式版)がリリースされた直後に出されたC++14の最初のドラフトN3337は、事実上C++11の規格の小さなミスのの修正版です。そしてドラフトなので無料です。

私には言語の用語を適当に書く悪い癖があるので標準を参照せよという自戒を込めて。

参考URL
Filed in 日記

CMSIS-RTOSとFREERTOS

By 酔漢 - Last updated: 月曜日, 1月 15, 2018

CubeMXが生成するコードには、FREERTOSを含めることができます。ブロッキングIO処理等RTOSを使わないと実現が難しい機能を作り込む上で大変重宝します。

ただ、CubeMXが生成するコードを見ると、どうやらFREERTOSを生で使わせずにCMSIS-RTOSのラッパー越しに使わせたいようです。となると、CMSIS-RTOSの詳細を調べておかなければなりません。ここひと月ほどFREERTOSの実装や詳細をちょこちょこ調べていましたが、それなりに技術情報はあるのでなんとかなりました。しかしCMSIS-RTOSはどうでしょうか。

Read the rest of this entry »

Filed in STM32

古いマイコンのためのブートローダー

By 酔漢 - Last updated: 木曜日, 1月 4, 2018

今年もよろしくお願いします。

さて、年末に『モトローラ6800伝説』を読み、懐かしい気持ちになりました。MC6800は私が最初に勉強したCPUであり、考えてみるともう40年近く前の話です。

この本を読んで、私もCPUボードを作ってみたいなぁなどと悪い癖が出てきたのですが、そこで問題になるのがブートストラップ・ロードです。MC6800はブートROMを内蔵していないため、何らかの方法でイニシャルローダーをメモリに事前に書き込まなければなりません。もちろん、アップデートの手段も必要です。

一番自然な方法はEP-ROMを入手して、書き込み機も自分で作ることでしょう。書き込み機はなんとかなります。しかしこのためだけに紫外線ランプを買うとなると、さすがに気後れします。先人に倣ってフロントパネルにトグルスイッチを並べ、手作業でイニシャル・ローダーを書き込む方法も考えられます。これは痛烈にかっこいい仕上がりになりますが、すぐに飽きることが目に見えています。

あれこれと考える内に、ブートローダーをワンチップ・マイコンで作ればいいと思いつきました。ただ、例によって考えるだけに終わりそうなので、ここにアイデアを記しておきます。

アイデアとしてはシンプルです。STM32マイコンから、十分なROM容量とUSBデバイスIF、外部メモリIFを持ったデバイスを選びます。144ピン LQFPのSTM32F103ZEあたりがよいでしょう。このマイコンは外部SRAMと直結できるFSMCを内蔵していますので、64kBのSRAMをそのまま接続できます。また、CubeMXを使って、USB Mass Storageデバイスとして構成することができます。後は何とかがんばって内蔵Flash ROMをMass Storageデバイス用のメモリにしてしまえば、ホストPCからはUSBメモリに見えます。

こうして作ったシステムにS9レコード形式のファイルを書き込みます。書き込みの終了を検知したらファイルをデコードしてSRAMに書き込めばいいのです。リセット時にはファイルシステム内のS9レコードファイルをデコードしてSRAMに書き込みます。

マイコンとSRAMを接続するバスは、TXS0108のような双方向レベル・コンバータを介してMC6800と接続します。電源起動後はMC6800をリセット状態とし、TXS0108をディセーブルにしてMC6800は切り離しておきます。

メモリへの書き込みが終わったらSTM32マイコンのFSMCをディセーブルにしてピンをHi-Zにし、TXS0108をイネーブルにしてMC6800をリセットから開放します。

これで、mbedのように気楽にプログラムを書き込めるボードになります。

邪道と眉をひそめる人も居るかと思いますが、要するに昔のCPUを懐かしみたいのか、昔の不自由を懐かしみたいかの違いでしか有りません。ちょっと規模が大きくなりますが、MC68000にも対応できそうです。

Filed in 思いつき

STM32 HAL、ゆっくり勉強中

By 酔漢 - Last updated: 日曜日, 10月 29, 2017

STM32マイコンのHALをゆっくりと勉強中です。

このブログでも少し紹介しましたが、GPIOを一通りいじって理解できたところです。割り込みについても簡単な実験をしましたが、多分ブログに書いたことは間違っているので書き直しが必要です。STM32のHALでは割り込みハンドラをユーザーに触らせず、weak宣言されたHALのデフォルト・コールバックをユーザーによってオーバーライドさせる方針のようです。

最近はI2CのHALをいじっています。STM32のI2C HAL関数には

の三種類があります。これらについては意図するところもわかりやすいです。が、これらの他に「メモリへの転送」というよくわからない関数があって困惑しています。今のところ無視して困っていません。しかし当たり前のようにこの関数を使っている方々も居て、少々居心地が悪いです。そもそもマニュアルに何も説明していないというのは、いったいどういう了見でしょうか。

それから、STM32のI2C HAL関数には”sequential”と名付けられた関数があります。これは最初何のことやらわからなかったのですが、I2Cのrepeated startを扱う関数群だそうです。だったら、”repeated_start”と名付ければいいのです。わざわざ見当違いの名前に変えるとは、いったいどういう了見でしょうか。

また、これらのrepeated startに対応する関数は割り込み転送には対応していますが、DMA転送には転送していません。いったいどういう了見でしょうか。

そして何より、I2Cデバイス・アドレスを「1 bit左にシフトして」引数に渡せと書いてあります。デバイスのレジスタどころか、I2Cプロトコルのビット配置にあわせるためにC言語の関数の引数をユーザーに調整させるとは驚きです。なぜ、コンピュータができることを人間にやらせるのでしょうか。STの技術者はHALがHardware Abstraction Layerの略であることを知らないか、Abstraction – 抽象とは物事の細かい事を覆い隠すことだと知らないようです。知らないのにHALを設計するとは、いったいどういう了見でしょうか。

何というか、我々人類と違う現実把握能力を持つ宇宙人が英語で書いた文書を読み解いている気分ですが、とにかくSTM32 マイコンのHALを勉強しています。

Filed in 日記