■ 2009年不定期ログ ■


2010年へ

(このページの)7月/8月はサボリ、 10月  11月 12月   一番下(最新)

2009年1〜6月分へ



2009/09/21(Mon) 敬老の日
 7月 8月はパタヘネ本へのツッコミだらけで、めぼしい成果はなかったのでお休み。

XMEGAをすこしだけいじる
【3行で結論】
以上。

 私にはまだ XMEGAを使う明確な用途・目的はないし、フラッシュ読み書きはできていない。  以前と違い、AVRISP mkII からでも XMEGA読み書きできるようになっている + AVRISP mkII は日本橋でも 6000円内外で入手可能なので、「使う」のが目的ならばコレを買った方が早い。
(XMEGA対応の情報を事前に知っていれば自分もついでに買ったかもしれないが、店頭で 箱を見ても 「xmega対応」とは書いていなかったので躊躇してしまった)。

また XMEGAを(本当の意味で)使う 有用な記事は既に O-familyさん が 作成されている(「電子工作の部屋」→「AVR ATXmegaのテスト・リポート」)のでそちらをどうぞ。

以下、読み飛ばしてもよい 本文
 2ちゃんねる AVRスレに デジット(大阪 日本橋のパーツ店)に XMEGAが入荷したとの情報があり、 系列店の 共立電子(同)の web通販ページ(共立エレショップ) にも 9/10付けで 他営業所在庫として ATxmega128A1-AU が登場した(リンク先は 2009/09/21(Mon)現在)。
1個 \1800で、1個だけなら +送料 120円、振込み手数料315円(以前の通販経験より)で入手できる。  但し、2個以上だと金額が3000円を超えるので宅配便に切り替わり送料が380円に増えるようだ。
 通販してもよかったが、買う前にチップリビジョンを確認したかった のと、 ジュンク堂(難波花月前にある大型書店)で コンピュータアーキテクチャ 関連の本を読みたかったので、 実際に日本橋に行ってきた。

チップリビジョンについて(デジット店頭)
 ATxmega128A1-AU はレジ台のガラスケースに陳列されていた。店員さんにチップリビジョンを 尋ねると把握されていなかったようで、刻印を調べさせてもらった。 裏面を見ると Hの英文字は あったが、Gはなかったので「まあ大丈夫だろう」、と 1個だけ購入した。

    刻印から調べる もう少しだけマシかもしれない方法は後述

ATxmega128A1-AU 刻印
ATxmega128A1-AU 刻印(刻んでないから マーキング?)

ちなみに 1番ピンは表写真 の左上。PIN1 IDENTIFIER の丸凹で識別させるらしいが、 他にも少し直径の大きい丸凹が二つあって 非常に紛らわしい。 もっと明確に分かるよう別の丸凹が出ないよう製造工程を工夫するか、データシート の PacagingPackaging informationに書いて欲しい。 刻印(マーキング)の向きも合わせて書いておけば済む話なのに、それがないので 本当は賭けだった。

全ての LSIで マーキング文字が正常に見えるように置いたとき、左上が1番で あるとは限らない。例えば Interface 2009年5月号 付録基板 CQ-FRK-NXP-ARM は 左下が一番ピンだし、 DIP ICの場合は、文字の向きに対して左下が1番ピン (これはまだ例外を見たことが ない) なので、これの延長と考えれば、左下を1番にするのは妥当と言える。

2009/10/04(Sun) 「例外」について訂正

 それに NXP-ARMチップには4隅に丸凹があるが、1番ピンのだけは凹が深く、 また、彫りの関係で 2重丸に見えるなどの工夫がされている。

付録基板では すぐひっぱり出せる範囲で調べると、マーキング文字列に対し、左上が一番ピンなのは Altera、Lattice。 左下なのは、XILINX、Freescaleだった。 また、メーカーで統一されているとは限らない。例えば Atmelの FLASHメモリ(縦長で短辺に のみピンあり)は右上が1番だった。

デジットの XMEGA 品揃えについて
 店員さんから「128A1 以外にも ATxmega64A1ATxmega64A3 がありますよ!」
と紹介された(それぞれ \1600)。  128A1とは 200円の差だったし、64A1と 64A3 の最新チップリビジョンがいくつになっているのか 確認していなかったので今回は購入しなかった。

    128A1 があるのは私が実際にブツを購入してきたので確実だが、64A1と 64A3は私の 記憶違いかもしれないので、それだけを目的に日本橋に行く人は、念のため事前にお店に確認して欲しい。  128A1も売り切れ注意(残り数はチェックし忘れた)。
    まあ、まもなく残りの品種も 共立エレショップの方で通販登録されると思う。

A3シリーズについて補足
 帰宅してから A3シリーズについて Atmelの webサイトへ確認しにいったら doc8068.pdf (2009/09 M版)が登録されていて ATxmega192A3, ATxmega128A3, ATxmega64A3 チップRev.B の エラッタが追加されている。  Rev.A は出荷されてない筈なので( "Not sampled ") 、デジットにあるのは Rev.B だと 思うが、購入する人は事前にエラッタ内容をよく読んだ方がよい。

但し、”ひとつでもエラッタがあるから使いものにならない” 訳ではない。 たいていの場合、そのエラッタは "自分の目的には関係ない(その機能は使わない)" ものだったり、 回避方法(Problem Fix/workaround)が書いてある。 まあ、”オイコラちょっと待て” なエラッタも時にはあるし、

・先にエラッタを読んでも意味がいまいち分からない
   ↓
・プログラムを作ってみたら動作がおかしい(期待と違う)
   ↓
・改めてエラッタを読んだら初めて意味が分かった!
 or (読んでなかったが 実は)エラッタにちゃんと書いてあった
   ↓
・終わった

という経験をしたのは私だけではない、と確信しているが。

実験前の下準備
 ATxmega128A1-AU は 0.5mmピッチの 100ピン TQFPパッケージなので、直接足に線材をハンダづけする 自信は私にはない。 「このときのために」 1年前に購入しておいた ダイセン電子工業の 変換 基板 Q100 \350 を使った。 (今回の日本橋出撃で、予備としてまた1枚購入した。)

XMEGAに何をやらせるかビジョンがないので、今は チップRev. の確認が目的である

100pin変換基板
変換基板に装着状態 表/裏
 工夫したポイントは 9〜14番ピンへの追加基板。ここには JTAG用信号4本と VCC/GND が密に並んでいるので、 信号の役割を合わせて AVR ISP互換コネクタ(6pin)を設けた。  あと、全ての VCC/GND AVCC/GNDペアにパスコンとして 0.1uF 2012サイズ をつけているが、 XMEGA本体からこんなに離れていて、果たして役に立つのか自信がない。
パスコンの効果がどの程度違ってくるのか実験した資料を読んでみたい。

チップRev. について(実験)
全てのVCC間、GND間、AVCC間は それぞれ XMEGAの中で接続されている(テスタでショートを確認)ので、 ISPコネクタ(本当は JTAG)だけ から電源3.3Vを供給して IDCODE を読み出してみた。

    JTAG線以外は全てオープン。AVCCに電源接続せずに実験しているが本当はとてもマズイ。  今回の範囲では JTAG操作はできているが、XMEGAにプログラムを実行させるならちゃんとベース 基板を作って電源ラインを強化しないと誤動作するかもしれない
JTAG テストプログラム結果

TAP RESETしました.
0011 IDCODEコマンドを送信しました.
IDCODE =  79 74 C0 3F : Rev.= [H]  PartNumber = 974C  ManufactureID = 01F  LSB=1

データシートを読んで、32bitの IDCODEをフィールド別に表示させている。  先頭4bitがチップRev. であり(0が A、1が B...) 7であるから、デジットで 購入した ATxmega128A1-AU のチップRev. が Rev.H であることが無事確認できた!
PartNumber も上下逆だが、ATxmega128A1 識別BYTEと合致している。

オマケ  Date Codes 刻印とチップRev. について
 デジットで購入するときはその存在を忘れていたが、XMEGAの表、裏ともに 4桁の数字 date codes というのがマーキングしてある。 自分の場合 0916 とあり 2009年第16週 製造を意味する(カレンダーを見ると 4月頃?)。 データシートで 128A1の Rev.H エラッタが追加(Rev.Gから 改良)されたのが doc8067.pdf (2008年11月 G版) なので、0916の時期なら十分 Rev.H (もしくはそれ以降)だと 推測が可能だった。

となると、date codes とチップRev. の対応関係が Atmelから公開されていれば話が早いのだが、 Atmelのサイトで xmega + "date code" で検索してみても XMEGAについてのズバピタな公式資料は ヒットしなかった(AVRfreaksで話題にはなっている)。 大口顧客にはちゃんと情報提供されているのだろうが、これが例えば、AT90USB ならデータシート (doc7707.pdf 2007/12 C版)の p.297のエラッタ項目にちゃんと対応表が載っていて ホビーユーザーにも親切だ(編集担当者の違い なのかな?)。

まとめると、ここで言いたかったことは

    目視で確認できる Date Codes がチップRev. 判断の材料になる(かも)
ということ。 下調べと虫眼鏡は必須。 虫眼鏡はお店で貸してくれるけれど倍率がイマイチ なことがあるので、マイルーペ を持参したい。


2009/10/04(Sun)
 涼しくなってから暑さが戻るとキツいなあ…

AVR XMEGAの刻印(マーキング)について 補足
 Atmel の pdfを読んでいたら、こんな写真を見つけた。

ATxmega128A1 ES品
ATxmega128A1 ES品
出展 出典 は AVR1900 doc8107.pdf の Figure5-5

量産品も このくらい 丸凹がハッキリして、かつマーキングの文字も見やすければよかったのだが 恐らく「量産品ではコストが掛けられない」という理由があるのだろう。 しかしそれなら、尚のことデータシートに文字の向きとの対応を書いておくだけでいいと思う。

前回の訂正
 ”【DIP品は刻印(マーキング)の左下が1番ピン】の例外は見たことがない” と書いたが、 例外が存在していた だけでなく、ブツを自分自身が所持していた。証拠写真を挙げて取り消させていただく。

40pin AT90Sxxxx
文字の左下が1番でない DIPの例 40pinの AVRシリーズ

AVR XMEGA用ライタについて
【結論】
実験レベルだが JTAG I/F経由で ATxmega128A1-AU フラッシュ読み書き成功


 AVRの新シリーズである XMEGAでは プログラミング方法(ソフトを作ることじゃなくて XMEGAのチップに 書き込む方法)が tiny や megaシリーズとは異なる。 しかし、前回書いたように、メーカー純正のライタ(正式には 「プログラマ」) AVRISP mkII が 十分安く手に入るので、確実性と信頼性のためにもそれを買った方がいい(過去のAT90Sシリーズは NGだが tiny/ megaシリーズにも使える)。

私は今まで調べてきたこともあり、自作にチャレンジした。 但し、2線式PDIではなく、前回に引き続き JTAG の方で だ。 2線式PDIと JTAGは物理層 が異なるだけで、データ1語(8bit + Parity1bit)のやりとりを 関数化しておけば、あとはかなりの部分が JTAG / 2線式PDI で共通の制御方法になる (JTAGから PDIをアクセスする形)。

最初は PDIコマンドの把握から始めて、アクティベーション(NVMの有効化)、 FLASH/FUSEなどのメモリ/特殊データの読み出し実験をし、現時点では FLASH(アプリプログラム領域)への 書き込みにも成功した。

プログラムの代わりにテキストデータを流し込んだだけなので、まだ 「XMEGAを使った」とは言えないが (ベースボードも未製作)。  それと、実験してみると、Atmelが公開しているデータシートは最新版であってもまだまだ不正確な部分が多い ことが分かり、ライタプログラムの完成品を公開する予定・自信 共に無い。
個人的には JTAG版があれば済むから、2線式PDI I/F版を作る気力もなくなってしまった。
代わりに JTAGでの 実験結果を簡単にまとめたものを公開しておく。

参考資料:実験結果小まとめ(TXT)

繰り返すが、普通は 純正プログラマを買った方がよい。

ATxmega128A1 初書き込み
ATxmega128A1 初書き込みの読み出し結果 512byte

上のキャプチャ は ATxmega128A1 の FLASHページサイズ 512byteを書き込んで、読み出して結果を ダンプしてみた所。

JTAG方式の注意
 JTAGEN FUSEを 1にしてしまったり、XMEGAが実行するアプリケーションソフトから JTAGDビットを '1'にされたりすると JTAGからのプログラミングは使用不可能になる。 また、ピン数の少ない XMEGA A4シリーズでは元から物理的に JTAGが使えない(信号が出てないから)。
JTAGが使えない場合は 2線式PDIを使うしかない。
尚、JTAGから内部メモリにアクセスできなくなるだけで、JTAG本来のバウンダリスキャン機能まで 死ぬわけではないと思う。 違ってたら一巻の終わりなので怖くて試せないけれど。

あと、XMEGAの RESETピンは RESET入力機能+PDI_CLK入力用で、汎用I/Oポートに機能を 切り替えられる訳ではないけれど、RSTDISBL FUSEが用意されている。 こちらも、RSTDISBLを有効にしても 2線式PDIが不可能になるわけではない。  純粋に 「リセットされたくない」場合に用いる機能のようだ。

AVRの各記録領域について
 AVRには FLASH(プログラム記録領域。ユーザー次第でデータも記録可能)以外にも 様々なデータ記録領域があり、読み書きコマンドが異なる。コマンド自体はデータシートを読めば 分かるが、XMEGAにはまだ存在の意図が不明なコマンドがあって悩ましい。 今回の経験を元に tiny/megaと XMEGA を比較してみた。
tiny/mega と XMEGAの比較
項目tiny または megaXMEGA
FLASHセルフRW可能
外部からもRW可能

LockBit(セルフ用)の影響範囲が
二つに分かれている
ブートローダFLASH領域の一部を使用
セルフ 外部とも RW可能
FLASH容量とは別に用意
それ以外は ←に同じ
EEPROMセルフRW可能
外部からも RW可能
Fuse セルフRonly
外部からは RW可能
LockBitセルフRW可能
外部からも RW可能
FLASH/BOOT/EEPROMの
セルフ/外部読み書きを制限
CALIB
(PSROW)
セルフRW不可※4
外部からは Ronly
(但し、書き込み先の
IOレジスタは RW可能)
PSROW
セルフRonly
外部からも Ronly※1
USROW ※2存在しない 容量=FLASHページサイズ
セルフ/外部 RW可能
デバイス ID Signature BYTE
セルフRW不可※4
外部から Ronly
DEVICE ID ※3
セルフRonly
外部から Ronly

表中の「セルフ」とは MCUが実行するアプリソフトからの読み書きのこと
'R' と 'W' は '読み' '書き'、 'Ronly' は ReadOnly の意
※1
XMEGA では CALIBとは言わずに、PSROW(Product Signature ROW)と呼び、情報量が多くなった。  但し、データシートには一部 CALIBration Row の名前を使い続けている箇所が残っていて(NVMコマンドなど)  混乱の元なので、早く用語を統一してほしい。  各レジスタのアドレスオフセット値の間違いも酷いぞ!! > doc8077.pdf 2009/04 G版

※2 USROW = User Singature ROW
これは今回の実験で初めてその存在を知った。  だが、データシートを読んだだけでは EEPROMと キャラかぶり していて、なんのために XMEGAで 登場したのか分からない(メモリの構造自体は勿論異なるだろうが)。

外部から読み出せては困るデータ(LockBitでプロテクト)と、プロテクト中でも外部から 読み書きできないと困るデータの両方が存在しているときに使い分ける為?
でもそれならば、外部に対する ”読み書き LockBit” を、今の1種類だけから、各領域ごとに制御できる ようにすればよかっただけだし(というか、理由を推理していたら、何故しなかった? と思えてきた)、 やはり謎だ。

※3
デバイス品種ごとにユニークな 3バイトデータで、例えば ATtiny2313 なら 1E 91 0A。
データシートには 「CALIB領域に記録されている」と書いてあるが、実際は I/O空間 に記録されている(MCU Controlグループ)。  これも要修正事項だ > doc8077.pdf 2009/04 G版

※4 訂正 2009/11/08(Sun) 追記
 世代が変わって P付きPA付き の中にはアプリソフト(セルフ)から 読み出しできるようになっているものがあることを発見した。 そういうこともあるので、採用品種に関してなにか決断が必要な時には各自が自分で データシートで確認してください。

2009/11/08(Sun)
ATxmega128A1 はほったらかし〜

データシートはよく読もう

訂正と前振り
 前回、tiny/megaでは Signature Byteや Calibration Byteはアプリソフト(以下「ソフト」) からセルフ読み出しはできないと書いたが、昨日、別件で調べ物をしていたら、 AVRのデータシートに 「Reading the Signature Row from Software」 と いう項目がある品種は Signature Byte と Calibration Byte がソフトから 読み取れるようになっていた。品種の最後にP とか PA がついた  マイナーチェンジ? 品種が該当するようだ。例外もありそうなので 必要なら個別にデータシートで確認した方がいい。

で、具体的な方法だが、SPMCSRレジスタの SIGRDビット(通常 Bit5?)と SPMENビット (通常 Bit0?)を1にして3クロック以内に LPM命令を実行すると Zレジスタのアドレス(0000-0007)に 対応した値が読み取れる。

 後学のためにデータシートをとっかえひっかえ読んでみたが、気になる点も見つけた。 ATmegaXX8Pシリーズ と、後継?の ATmegaXX8PAシリーズのデータシートには


結局どっちなんだろう? データシートの方に編集ミスがあるのは確実だ
(doc8025.pdf 8025K-AVR-10/09 と doc8161.pdf 8161D-AVR-10/09 を参照した)。

特に ATmega88P、168P、328P は 秋月で購入可能なことだし。
    続報あり ATmega88P で実験

本題
 さらに、Calibration Byteや SignatureByte周りについてデータシートのチェック・比較をしていたら 自分が凄い思い違いをしてたことに気づいてしまった。 トホホな事態にはならなくて幸いだったが。

 Calibration Byte (キャリブレーション とは日本語では 「較正(こうせい)」のこと) は、AVRの内蔵RCオシレータが 所定の周波数になるように OSCCAL という調整用レジスタに 自動的に書き込まれる値(情報)で、 1個ずつ個別の較正値が 出荷前に書き込まれているので 結構重要だ。

で、自分の使用経験がある ATtiny2313(V)ATmega64(L) は RCオシレータが 複数用意されており、夫々のキャリブレーション値(以下 CAL値 )が2個または4個ずつ記録されている。 ヒューズ設定で RCオシレータのどれを使うか(もしくは外部発振器を使うか)を選択するが、 リセットしたときに、それぞれのヒューズ設定にあった CAL値をロードしてくれる ものと今までは思っていた。 しかし、実際には

    リセットすると(されると) ヒューズ設定に関係なく、0番地の HighByte
    (BYTE単位なら 1番地) の値を OSCCALレジスタにロードする

という 仕様 になっているようだ。つまり ATtiny2313なら 8MHz用の値、ATmega64なら 1MHz用の 値(= 工場出荷状態のヒューズ設定用)がロードされる。
従って、ATtiny2313や ATmega64を 4MHzのRCオシレータで使うヒューズ設定に切り替えると、 そのままでは、ずれた周波数で発振する値が OSCCALに設定されてしまう (例外は、偶然 CAL値が一致していた場合)。

ATmega64の場合、ご丁寧に、
    ”If other frequencies are used, the calibration value has to be loaded manually, see “OSCCAL . Oscillator Calibration Register(1)” on page 43 for details.”
    doc2490.pdf 2940N-AVR-05/08版 p.293より

とダメ押しの文章があるので、やはり期待した動作にはならないようだ。 まあ、AVRの RCオシレータは 環境温度や電源電圧に大きく影響されるから (例えば ATmega64 では 5V 25℃条件で較正されているから、3Vで使う時に文句言うのは 筋違い)

    周波数精度に期待するのは間違っている

のだが、明らかにずれるだろうと分かっている値がロードされるのは少し気分が悪い。
それに、「手動でロードしなければならない」と言っても、ATmega64は ソフトからは Calibration Byteが読み取れないのだからイジワルな話だ。

結局、外部プログラマで読み取って、予めソフトに直接 CAL値を埋め込んでから FLASHに 書き込むか、FLASHや EEPROMの所定のアドレスに CAL値をコピーしておき、 ソフトはそのアドレスを読んで OSCCALに個別の正しい値を設定することになる。
後者の方が保守管理が楽だろう。それに、自分が改造して使っているライタソフト

    ELM/ChaNさんの AVRsp.exe では -c オプション がちゃんと用意されている
    tips.txtに書いてある元々の用途は、今回気づいたのとはまた別の AVRの仕様 によるものらしい。

 ということで サウンドロップの改造で、
    ”〜 4MHz用の(出荷時)調整値で、電源が入るとこの数値が OSCCALレジスタに自動的に書き込まれます”

と書いたが、間違いだった(実際は 1MHz用の CAL値が入る)。 但し、説明は間違っているが、AVRサウンドロップのソフト自体は、4224kHz(目標値)になるように OSCCALを書き換えるから大丈夫。 元々 4MHz用の CAL値は使えないので自分で較正しなくてはならない。  サウンドロップのページも修正すべきだが、他にも改訂しておきたい箇所が書きかけのまま HDDに 残っていて、しばらくはできそうもない。

 さて、前述の通り、最近の品種ではソフトで Calibration Byte (+ 実質同じ場所に記録 されている Signature Byte )が読み取れるように改良している、のだが、その殆どの品種 では RCオシレータの周波数が 1本化されている(つまりリセット後の OSCCALレジスタ= CAL値) からあまり意味がなかったりする… Singature Byteが読める方を重要視しているのかな?

2009/11/21(Sat)
寒くなったなあ…。 前回の AVRネタを続ける(前振りの方)。

ATmega88P は ソフトで Signature Byte を読み出し可能!

 秋月で購入した ATmega88P と、マルツ電波で購入した ATmega168(P は付かない) で Signature Byte、ついでに ヒューズ + Lock Bit を読み出しするテストプログラムを 作って実験してみた。

プログラム仕様
 下記 HEXファイルを書き込んだ ATmega88P or ATmega168 の電源を入れると、 SPI機能を使って 19番ピン(SCK) と 17番ピン(MOSI)に、 Signature Byte 1/2/3byte / CAL値、続けて Fuse LOW/HIGH/Ex / LockBit の8バイト情報を 出力する。少し待ってまた出力 を繰り返す(約 1.4ms周期)。
  • SPIの周波数は CPUクロックの 1/4(ヒューズが出荷状態のままなら 250kHz)
  • 出力フォーマットは Mode3、 MSBファースト
  • 16番ピン(SS)に 出力停止期間 High信号を出力

尚、megaXX8シリーズならどの品種でも(48/88/168/328 無印/P付/PA付) 動くと思う。  詳細は HEXファイルを逆アセンブルのこと。

しかし、あくまで実験用(外付け回路なし)なので、オシロスコープやロジアナなどの 観測機器を用意しないといけない。 シミュレータでは動かしていない(使ったことがない)。

HEXファイル

 :020000020000FC
 :0600000054C03223100180
 :1000AA0002E00EBF0FEF0DBF0CE204B90CE50CBD68
 :1000BA00FF2721D0E0E00FD0E2E00DD0E4E00BD042
 :1000CA00E1E009D0E0E00FD0E3E00DD0E2E00BD0B0
 :1000DA00E1E009D0EECF01E207BFC8950EBC0DB42E
 :1000EA0007FEFDCF089509E007BFC8950EBC0DB401
 :1000FA0007FEFDCF089504E005B9002700000A9520
 :06010A00E9F705B90895B4
 :00000001FF

結果

mega88P Signature Byte
ATmega88P の Signature Byte + CAL値波形
CH1:SCK   CH2:MOSI

 オシロで観測した波形を16進数に直すと、以下のようになった
ATmega88P 1E 93 0F 9D : 62 DF F9 FF 備考:使用した Chipの Date code は 0752
ATmega168 54 32 10 C0 : 62 DF F9 FF   同 0721

ヒューズ/ Lock Bit(上記 コロンの右側 4バイト) は、両チップとも同じ値を読み出していて、 これはデータシートに書いてある出荷状態の値と合致した。  本命の方だが、実験前は ATmega168(P または PAの付かない旧世代品)はもちろん、 ATmega88P も Signature Byte が読み出せないものと予想していた(外しても損がない)。

しかし、実は ATmega88P はちゃんと Signature Byte 1E 93 0F を読み出せた。
(あと 9D は CAL値だが、これはチップ毎に異なる)

一方の ATmega168 では単にFLASHの内容を読み出している(読み出しには LPM命令を使っている)。  こちらは期待通りで、データシート的にも不具合ではない。 ちなみに、54 32 10 と連続番号になっているのは、そうなるように FLASH先頭番地の データを調整しているから(上記 HEXファイルに含まれている)。

尚、念のために断っておくと、今回実験したのは ATmega88P 1個だけなので、残りのサイズ違い品や PA版 に ついては未確認だ。 後は

    アトメル (特に、データシートの編集担当) がんばれ!!

の言葉で締めておこう。


2009/12/23(Wed)
 寒い、手がかじかむ。意地になって、まだエアコン使ってないけれど。

ATtiny2313A と ATtiny4313 キター
 Atmel(アトメル)の webサイトへデータシート更新チェックにいくと、doc8246.pdf の脇に

    ATtiny2313A の文字列を発見。

ただ、今更感が強く、どうせなら 4313相当(FLASH容量が 2313は 2KBなのに対し 4KB)を出せばいいのに、 と思っていたところ、 DL完了したデータシートを開いたら、

    ATtiny4313 の文字列も表紙ページを飾っていた!

 元々、ATtiny2313 はその品名から推測できるように、初期の AVR、AT90S2313 の 後継品という位置づけだ。そのためか、他の tinyシリーズとは少し毛色が異なる。
即ち、
  1. USARTがある
  2. A/Dコンバータがない。AC(アナログ・コンパレータ)しかない

データシート doc8246.pdf を読んで ATtiny2313A / ATtiny4313 のトピックを 拾い上げてみた(完全網羅したわけではないし、誤読の可能性はゼロではない)。

    [n] の数字は doc8246.pdf の 28.1 Datasheet Revision History の番号

  1. ATtiny4313 の FLASH / EEPROM / SRAM 容量は全て ATtiny2313(A)のそれの倍
  2. [1] 本Datasheetは ATtiny2313版(doc2543.pdf) をベースにしている
  3. [2] Datasheetの体裁変更〜 青字部分をクリックすると該当ページにジャンプする 機能がついた。 Good job
  4. [3] DIP品はある。 パッケージとして VQFNというのが追加
  5. [4] BOD レジスタ 0x07 追加
  6. [5] PRR 消費電力制御 0x06 追加 周辺機能を個別に
     電源制御して消費電力を減らせる
  7. [6] 前から気になっていた Sleep Mode の指定方法の間違い
     (Datasheetのみ?)が直った Table 13 → Table 7-2
  8. [9-12] PCINTx割り込みに対応(大概のピンを割り込みに使用可能になった)
  9. [17] USARTに USART in SPI Mode が追加された
  10. [20-22] SPMCSRレジスタ拡張でソフトから SignatureByte(+OSCCAL CAL値)が読める。
      Tiny2313(A)は OSCCAL CAL値が複数あるので役に立つんじゃないかな。
      ただ、ビット名称が "RDSIG" じゃなく "RSIG" なのが気になる。
      尚、Signature Byte は今までの Tiny2313 と一緒で 1E 91 0A。
      tiny4313 は 1E 92 0D
  11. [25] DC特性 Note.4/5(tiny2313A では Note.3/4) の VOL/VOH テスト条件の食い違いが直って 表本体の数値 20mA@5V 10mA@3Vに揃った

  12. Chip Revision が Dから始まる。 つまり ATtiny2313(Rev.Cまで存在)の続き扱い
  13. エラッタがない。 今後も登場しない とは限らないが、 流石に ATtiny2313の驚愕エラッタ は修正しただろう

 この中で、ATtiny4313 の登場以外に 個人的に一番目を惹いたのは USARTに SPI機能が追加されたこと。  これで、いちいち USIでクロック反転毎に I/Oレジスタを叩く必要がなくなるので、合間に他の 演算処理に CPUを割けるし、Mode3 の SPIが素直に使える((少なくとも)ATtiny2313 の USIで Mode3 相当の動作をさせるには小細工が必要だった)。

日本国内のホビー分野においては、ATtiny2313A は 秋月電子 で 1個100円で購入できる従来の ATtiny2313 が強力なライバルになると思うので、 ATtiny4313 の活躍に期待。

 あと、話は変るが、AVR命令セットの資料の doc0856.pdf。Rev.0856H-AVR-07/09 になって、 ATtiny10 用を追加する際の編集ミスで、従来AVRに対する LD系命令 の 所要クロックが複数件エンバグしてると思う。 早く直してください > Atmel

2009年まとめ

2010/07/25(Sun) 追記
 AT90USB162の JTAG I/Fだが、AT90USB162で動かすプログラムは STK526-series2-cdc-2_2_2-doc.zip の CDCサンプルを改変したものを WinAVRでビルド(コンパイル)している。  この場合、このプログラムには GPLが(確実に)適用されるのを失念していた
で、これと 通信する JTAG DLL (Windowsmマシンで動く)や、さらにその JTAG DLLを 呼び出すアプリソフトにまで GPLの影響を受けるのか私にはよく分からない(確認するのも面倒)。 元々 JTAG DLL側のソースは公開するつもりだったが、アプリのソースは物によって 公開したりしなかったり自由にしたい(GPLに縛られたくはない)。

よって、トラブルを避けるため AT90USB162版は公開しないことにした。 元々は EZ-USB FX2 版より安価に製作できる点に意義を見出して着手したのだが、トホホ
同様の理由で CQ-STARM版も、もし公開するのなら cygwinではビルドできないなあ。
追記終わり

2010/08/22(Sun) さらに追記
(誤) ”WinAVRでビルドすると確実にGPL適用” は、
   「(それにより)GPLのライブラリがリンクされてしまうから」
と私が思い込んでいたからだが、実際には、リンクされるライブラリ AVR-libcのライセンスは GPL ではないので(+CDCサンプル自体のソースコードも GPLであるとは書いてない)、自動的に GPLに なったりはしないようだ。 GPLでないなら、じゃあどんなライセンスなのか、が読みきれてないけれど、 まずはこの酷い間違いを訂正。
追記終わり

 2010年は、大規模システム開発の設計手法を勉強したい(勉強中)。 本に書いてあるように、事前にしっかり仕様・検証方法定義をやってからコード記述 に入りたいとは思うが、中々難しい。 概論レベルのルールが書いてある本は見つかるが、どうもしっくりこないので、 ゼロから構築していった実例(トラブルシュート付)が書いてある資料が読みたい。
そういうノウハウが「会社」としては一番の資産というか商売道具なので、 なかなか表に出てこない気もするが。

Brian W.Kernighan & Rob Pike の本 「プログラミング作法」 ASCII出版 の
7.3章「高速化の戦略」に

    プログラムを高速化するために費やされる個人の時間は、そのプログラムが廃棄 されるまでに高速化によって節約される時間を越えてはならない。

というルールが書いてある。 ”高速化” ではなく、一からプログラム(や、なんらかの システム)を ”作る”場合にもほぼ当てはまるルールだと思うが、実に耳が痛い
自分の場合、「経験値」というキーワードで自分を納得させてる場合もあるが、 後で考えると、「金で時間を買えた」事例も時々(しばしば?)あった。

いかんせん このルールは、登場するふたつの 時間 をある程度正確に見積もれないと お話にならない、という裏の意味がある訳で、見積もり力 を上げるのが最重要課題か。


翌年へ

このページの先頭に戻る