AVR (3)
話が前後するがマイコンについて
メモリマップ
メモリ空間は3つに分かれている。
プログラムをRAMに載せて実行することはできない。
フラッシュ
内容 | アドレス | サイズ |
---|---|---|
応用プログラム用 | 0x0000 - | |
ブートプログラム用 | - 0x1FFF or 0x3FFF | 256 or 512 or 1024 or 2048 |
応用/ブートそれぞれに書き込み禁止などの設定が可能。
RAM
内容 | アドレス | サイズ |
---|---|---|
レジスタ | 0x0000 - 0x001F | 32 |
I/Oレジスタ | 0x0020 - 0x005F | 64 |
拡張I/Oレジスタ | 0x0060 - 0x00FF | 160 |
SRAM | 0x0100 - 0x05FF or 0x0AFF | 1280 or 2560 |
EEPROM
内容 | アドレス | サイズ |
---|---|---|
0x0000 - 0x01FF or 0x03FF | 512 or 1024 |
ヒューズビット
拡張、上位、下位の3つのフューズビットがある。フラッシュメモリの消去、書き込みではアクセスできない。
間違った値を書いてデバッガからマイコンにアクセスできなくなった場合、パラレル通信で書込みを行うと修復できる。
ベクタテーブル
直接命令を書くタイプ。そのため基本的には rjmp
命令が並ぶ。
AVR (2)
AVR-GCC
AVR 用の GCC, Binutils, Libc がある。 Libc があるので C ライブラリ newlib をビルドしたりリンカスクリプトを書いたりする必要がない。
AVR Libc
マニュアルが2箇所にある。同じもののようだ。
- http://www.nongnu.org/avr-libc/user-manual/pages.html
- https://www.microchip.com/webdoc/AVRLibcReferenceManual/index.html
開始時の処理
リセット後 .init0
から .init9
までのセクションに配置された関数を処理して main()
を実行する。
https://www.microchip.com/webdoc/AVRLibcReferenceManual/mem_sections_1sec_dot_init.html
.initN | 内容 |
---|---|
0 | __init() を呼ぶ |
1 | ユーザー定義 |
2 | スタック, r1 初期化 |
3 | ユーザー定義 |
4 | > 64KB ROM: .data セクションのデータを flash -> SRAM, 他: .data のコピーと .bss セクションの 0 クリア |
5 | ユーザー定義 |
6 | C++の場合: コンストラクタ |
7 | ユーザー定義 |
8 | ユーザー定義 |
9 | main() を呼ぶ |
64KBより大きいROMのマイコンの場合、 .bss
セクションが 0 クリアされない?
終了時の処理
https://www.microchip.com/webdoc/AVRLibcReferenceManual/mem_sections_1sec_dot_fini.html
組み込みの場合、使うことはまず無いが、main()
を抜ける際には .fini9
から .fini0
まで処理する。
AVR (1)
ATmega16U4 / ATmega32U4 を調べたのでメモ。
日本語化された資料が以下にある。
ATmega
Atmel 社のマイコン AVR の Mega シリーズ。
リセット
BOOTRST と IVSEL で設定する。
BOOTRST | IVSEL | リセット | 割込ベクタ |
---|---|---|---|
0 | 0 | 0x0000 | 0x0002 |
0 | 1 | 0x0000 | Boot領域先頭 + 0x0002 |
1 | 0 | Boot領域先頭 | 0x0002 |
1 | 1 | Boot領域先頭 | Boot領域先頭 + 0x0002 |
Boot領域は BOOTSZ の値で決まる。
BOOTSZ1 | BOOTSZ0 | 先頭(16U4) | 先頭(32U4) |
---|---|---|---|
1 | 1 | 0x1F00 | 0x3F00 |
1 | 0 | 0x1E00 | 0x3E00 |
0 | 1 | 0x1C00 | 0x3C00 |
0 | 0 | 0x1800 | 0x3800 |
BOOTRST, BOOTSZ
ヒューズビットの設定値。
IVSEL
HWBE
ヒューズビットの設定値。 0の場合、リセット時にPE2の入力LowでリセットアドレスをBoot領域先頭に変更する。BOOTRSTより優先。
ヒューズビット
プログラム領域とは別にマイコンの動作設定を行う領域。 設定によってはマイコンが動作しなくなったり、プログラム書き換えが出来なくなったりする。
MCUSR
MCUステータスレジスタ。リセット要因フラグがある。フラグは0書き込みでクリア。
ビット | MCUSR | |
---|---|---|
5 | USBRF | USB |
4 | JTRF | JTAG |
3 | WDRF | ウォッチドッグ |
2 | BORF | 低電圧 |
1 | EXTRF | 外部リセット |
0 | PORF | 電源ON |
Ergo42 (2)
購入・組み立て
Ergo42 Towel は基本セットを購入した。
基本セットにしたのは,フルセットにしてもキースイッチとキーキャップは買う必要があり,通販で探すとキースイッチとキーキャップに加えて Pro Micro やダイオードも購入できる TALP KEYBOARD があったため。
またネジや金属スペーサーは電子パーツ屋にあるだろうと思ったのだが,電子パーツ屋へ行ってみると M3 と M2.6 しか扱っていなくて M2 を通販することになった。
左右を接続する 3.5mm の TRS/TRRS ケーブルは,組み立て時は家で余っていたケーブルを使った。その後,秋葉原へ行く機会があったので 千石電商 秋葉原2号店 で購入。オシャレなケーブルが不要なら形状や長さのバリエーションが豊富で安くていい店。
ダイオードは表面実装ではなくアキシャルリードタイプにしたので,半田付けは問題なく終了。
したはずだったのだが,スイッチを取り付けた後で縦一列 (4個) の向きを間違えていることに気づいて面倒なことに。ダイオード両側のスイッチ 8 個だけ取り外してなんとか修正。
ファームウェア
msys2 でビルド・書き込みができるようだったので msys2 で行った。
ビルド・書き込みはコマンド1つ。
make ergo42:default:avrdude
書き込み処理が要求されたら Ergo42 のリセットボタンを押すと書き込み開始。 ブートローダーの種類なのかリセットボタンを押す回数が1回のものと2回のものがあるようだが,TALP で購入したものは1回だった。
Ergo42 (1)
かつては PS2 接続の FKB8720 を使っていたが,PC から PS2 コネクタが無くなり USB キーボードに変更した。
その時,いずれはそれなりに高級なものを買うとして,ひとまず安物でいいやとロジクールの K270 を購入した。
2018年現在は後継の K275 になっているようだ。(アドレスが K270 のままだが商品は変更されている)
その後,ときどきキーボードの購入を検討するものの,結局は買わずにいた。
この夏に再びキーボードを検討していたところ,この1, 2年で色々な自作キーボードが発表され購入できるのを知って,思わず購入してしまった。
どんなキーボードか?は下記ページに書いてある。
Why Ergo42? - 私が Ergo42 を作った理由
以前 Kinesis や ErgoDox Ez を見て分割キーボードに興味があったので,Ergo42 の他には下記のキーボードなどを検討した。
この中から Ergo42 を選んだのは
- 格子配列
- キー数が多め
- 親指まわりが普通
- ケース (アクリル板) がセット
- 販売中
といったところが理由。Mint60 もかなり気になったのだが,日本語配列派のため英語配列キーキャップを付けたくないのでやめた。
eZ Platform (2)
eZ Platform のドキュメント
- https://doc.ezplatform.com/en/latest/
- https://doc.ezplatform.com/en/2.2/
- https://doc.ezplatform.com/en/1.13/
- https://doc.ezplatform.com/en/1.7/
eZ Publish 時代のドキュメントも公開されているようだ。
Symfony のドキュメント
- https://symfony.com/doc/current/index.html
- https://symfony.com/doc/4.1/index.html
- https://symfony.com/doc/3.4/index.html
過去のバージョンでは日本語版も作られていた。1.4 については辞書というより本になっているようだ。
eZ Platform (1)
eZ Platform を調べてみた。
- eZ Platform は eZ Systems が開発する CMS。
- 以前は eZ Publish という名前だった。
- 現在でも eZ Platform の Kernel のリポジトリの名前は eZ Publish 。
- eZ Publish 5.0 以降は Symfony をフレームワークとして作られている。
Platform と Kernel のバージョンは下記の関係。リリース日は GitHub のリポジトリによる。
製品名 | Kernel | リリース |
---|---|---|
eZ Platform 2.x | 7.x | 2017-12 |
eZ Platform 1.x | 6.x | 2015-12 |
eZ Publish 5.x | 5.x | 2013-04 |
2012年10月-2016年1月の間は、公式サイトで日本語に翻訳されたブログも公開されていた。