arduinoで利用可能な漢字フォントROMの製作
作業メモです。
以前、arduinoで大容量のメモリが使いということで調査した、
SPIインタフェースのSerial Flash memory W25Q64VBを使って漢字フォントROMを製作しました。
16x16LEDドットマトリックス表示やグラフィック液晶なんかに使おうと思います。
Unicodeで利用できるようにしました。
フォントデータは、電子書体オープンラボさんで配布している
日本語 ビットマップフォント集のjapanese-bitmap-fonts-0.4.5.tar.bz2と
Little Limitさんが配布している美咲フォントを利用させていただきました。
8〜24ドットの半角・全角文字 14種類のフォントを詰め込みました。
Unicode対応ですが、半角と全角JISX0208のみなので7000字弱のみの対応です。
データサイズは1.73Mバイトとなりました。
W25Q64VBへ書き込みは、flashromで紹介されている「Serprog/Arduino flasher」を利用しました。
Arduinoをprogrammerとして利用し、flashromコマンドを使ってフラッシュメモリに書き込みします。
flashromでは「FT2232SPI Programmer」なんかも紹介しているので
秋月のFT232RL USBシリアル変換モジュール何かでも書けそうです。
以降、「Serprog/Arduino flasher」利用の作業メモです。
書き込みのためのホストとしてCentOS6.5を利用しました。
CentOS6.5上でのツールの入手と作成
1)flashromツール
下記の手順でコマンドを実行してソースのダウンロードをコンパイルを行う。
$ svn co svn://flashrom.org/flashrom/trunk flashrom
$ cd flashrom && make
$ cd ../
コンパイル時、幾つかのライブラリ不足でパッケージを適宜インストールする必要あり。
pciutils-develをインストールした。
#yum install pciutils-devel
2)arduino用プロフラムの入手と書き込み
下記の手順でコマンドを実行してソースのダウンロードをコンパイルを行う。
$ git clone git://gitorious.org/gnutoo-personal-arduino-projects/serprog-duino.git
$ cd serprog-duino && make && make upload
ここでは、arduinoのCPU AVRをターゲットとしたクロスコンパイルを行うので
avr-gcc等のavr toolchain環境が必要となる。
make upkoad でavrdudeコマンドにてarduinoへのブログラムの書き込みを行っている。
デバイスとして/dev/ttyACM0を使う。/dev/ttyACM0のアクセス権限をいじる必要あり。
The AVR GCC ToolchainのRedHatのインストールの説明のパッケージをインストールすることで
対応できる。
#yum install avr-gcc
#yum install avr-binutils
#yum install avr-libc
#yum install avr-gdb
#yum install avrdude
flashromコマンドを使った書き込み
/dev/ttyACM0のアクセス権限の変更は面倒なのでスーパーユーザ権限で行った。
書き込み時には、「Serprog/Arduino flasher」の説明のようにarduonoにSPI接続で
W25Q64VBを接続させる。3.3V駆動なのでレベル調整が必要。CD4050で対応。
書き込むイメージについて
flashromコマンドは、フラッシュメモリのメモリ領域の全書き込みしかできないので
フォントデータ1.73Mバイト(1,817,162バイト)にダミーデータをつけてきっちと
8,388,608バイトのイメージファイルにしないとダメ。
ddコマンドでダミーを作成し後ろに結合して image.binファイルを作成した。
コマンドの実行
[root@marimo fontbin]# time flashrom -p serprog:dev=/dev/ttyACM0:2000000 -w ./image.bin flashrom v0.9.7-r1850 on Linux 2.6.32-431.5.1.el6.i686 (i686) flashrom is free software, get the source code at http://www.flashrom.org Calibrating delay loop... OK. serprog: Programmer name is "serprog-duino" Found Winbond flash chip "W25Q64.V" (8192 kB, SPI) on serprog. Reading old flash chip contents... done. Erasing and writing flash chip... Erase/write done. Verifying flash... VERIFIED. real 3m32.206s user 0m10.409s sys 0m0.211s
3分32秒で書き込み完了。
当初、途中で止まったりベリファイエラーが発生したがコンデンサを入れることで
安定し回避できた。
イメージをROMから読みだして念のため確認
[root@marimo fontbin]# time flashrom -p serprog:dev=/dev/ttyACM0:2000000 -r test.bin flashrom v0.9.7-r1850 on Linux 2.6.32-431.5.1.el6.i686 (i686) flashrom is free software, get the source code at http://www.flashrom.org Calibrating delay loop... OK. serprog: Programmer name is "serprog-duino" Found Winbond flash chip "W25Q64.V" (8192 kB, SPI) on serprog. Reading flash... done. real 1m47.215s user 0m6.013s sys 0m0.139s [root@marimo fontbin]# cmp test.bin image.bin -l [root@marimo fontbin]# echo $? 0
問題なし
bviコマンドでバイナリデータの中も見たが問題なし
取りあえず、正常に焼けたのでフォント利用のライブラリを作成します。
---
この記事には続きがあります。
arduinoで利用可能な漢字フォントROMの製作(2)
« 映画 2001年宇宙の旅 船内でタブレットが使われている | トップページ | CEATEC JAPAN 2014に行ってきました »
「arduino」カテゴリの記事
- Arduino IDE+Arduino STM32環境で指定と異なるgccが使われてしまう(2025.01.23)
- Zorin OSでArduino Uno互換機(CH340)が認識しない(2025.01.19)
- Arduino IDE 2.3.4でArduino STM32を利用する(2025.01.12)
- Arduino用 SKK日本語変換ライブラリの開発 その1(2024.12.28)
- NeoPixel(WS2812B)の制御 その5(2024.09.15)
「AVR」カテゴリの記事
- NeoPixel(WS2812B)の制御 その5(2024.09.15)
- Arduino用SJIS漢字フォントライブラリ SDカード版を作成しました(2018.10.30)
- ATtiny13AでI2C接続キャラクタLCDを利用する(4)(2018.04.16)
- ATtiny13Aで赤外線リモコン受信センサーを使う(2)(2018.04.15)
- ATtiny13AでHC-SR04を使った距離計測(2018.04.14)
「表示器制御関連」カテゴリの記事
- NeoPixel(WS2812B)の制御 その5(2024.09.15)
- Arduino用 美咲フォントライブラリを更新しました(2024.03.21)
- Raspberry Pi Pico(MicroPython)でLEDドットマトリックスを使ってみる(2024.03.14)
- Raspberry Pi Pico MicroPython用のマルチフォントライブラリ(2023.02.09)
- MicroPython(Raspberry Pi pico)で8x8ドットNeoPixcel文字表示(2023.02.08)
« 映画 2001年宇宙の旅 船内でタブレットが使われている | トップページ | CEATEC JAPAN 2014に行ってきました »
コメント