STM32F4シリーズを使ってみる12 - FatFsとSDカード再考その1 -
このぶろぐを始めてから今に至るまで「FatFsがうごきません><」という漠然としすぎて
すごく返答しづらい内容の質問をコンスタントに頂くのですがその9割が単なる配線ミス
でしたと言うオチだったのですが、残る1割にSTM32に潜んでいた未知のエラッタや
評価ボードの設計不備、および私の不備というクリチカルな問題が潜んでいたのが
分かっています。
STM32F4が世に出て早数年、いろんな情報やノウハウも出そろってきましたので
ここで基本に還ってF4中心にSTM32とSDカードを接続せしめる手法について今一度
考察していきたいと思います。まず予習としてChaN氏のFatFsとMMCの解説のページ
は必ず目を通しておいてください。
●STM32F4との接続・ハードウエア編
STM32F4とSDカードを実用的に繋げるためにはSTM32F4の周辺機能であるSPI
若しくはSDIOを用いて接続可能です。SPIはデータ線が1bitのシリアルですが
SDIOは4bit(8bitまで)可能だが8bitバスが利用できるカードは限られている)
まで可能でSDIOの方が高速にデータをやり取り可能です。
その代りSDIOの場合はその機能を最大限に引き出すため使用するI/Oポートは
固定化されていてSDIOを使うときは重複する他の周辺機能は使用不可能に
なります。一方でSPIは柔軟に割り当てが可能なためピン数がすくない品種で
速度をそれほど要しない場面でSDカードを使う際に重宝します。
おさらいですがSPIを使用するときはSD/MMCのSPI互換モード、SDIOを
使用する時はSD/MMCのネイティブモードとして接続します。
当ぶろぐではSDIOを使用するSD/MMCネイティブモードに特に焦点を
当てていきます。
私のおきぱのSTM32F4向けのサンプルではSTM32F4Discovery,STM32F429IDiscovery
ではSPIを、その他のボードに関してはSDIOをそれぞれ使用するようにしております。
↑STM32F4Discoveryとの接続(SPI)
↑紅牛/ECH_BOARD改造基板との接続(SDIO 4bitmode)
SDIO,SPIのいずれの場合においてもSDカード/MMCの電源投入後の初期化時は
オープンコレクタで動作することが前提のため、CLKを除く全てのデータ線は必ず
外付け抵抗でプルアップしてください。
プルアップ抵抗値についてはNexperia(元NxP)のアプリケーションノートAN10911に
極めて詳しい解説があります。私はそれらを吟味した上で10kohmよりちょっと上の
22kohmを常用しております。メーカ製評価ボードでは入手の容易なSDHCカードを想定
しているのか下限値の10kohmで吊っているのが非常に多かったです。また、今日びの
マイコンは内蔵プルアップを有する物が多いですがそれに絶対に頼ってはいけません。
面倒臭がらず必ず外付け抵抗を用いてプルアップしてください。
以前MCIを動作させるのに難儀していた中華LPC1788基板ですがEA互換のはずなのに
EA向けのFatFsのサンプルがそのままでは動かないもんで回路図をよく見たら…
SDIOの信号線にプルアップが無かったorzちゃんとつけましょう!
このブログ記事を書く際に久しぶりに動かしてようやく気づいたorz
CLKは基本宙ぶらりんです。リセット直後のI/Oの挙動が不安な場合は100kohm程度で
Loレベルに弱く固定すれば良いです。私が見た限りではEAのボードは「宙ぶらりん
(ダンピング抵抗有)」、ST系のボードも「宙ぶらりん」、中華系のは適当で他のI/Oと
一緒にまとめてCLKもプルアップしてたりそもそも基板の設計不良でCLK以外の必須
の信号線すらプルアップしてなかったりしますがCLKに関しては基本「宙ぶらりん」で
良いと思います。と言いたいところですが!!
STM32のSDIO_CLKは非常に高速なクロックが走り、パタンの引き回しによっては
信号の反射によって猛烈なリンギングを発生させるため信号の信頼性が著しく低下して
しまいます。よってSDIO_CLKの出力端のごくごく近くに純抵抗成分を配置して
伝送経路のインピーダンスのマッチングを図り信号の反射を抑える必要があります。
最適な抵抗値は回路構成や回路パタンの引き回しに大きく左右されるため0~47ohmを
目安にオシロとにらめっこしながら切った貼ったをして決めましょう。繰り返しますが
直列終端は信号源のすぐ近くに配置しないと後で述べるフェライトビードの配置と
同じく全く効果がないどころか最悪パワーアップさせてしまいますので基板設計の
段階から考慮しておくべきです。
20160110追:
直列抵抗入れてもダメならフェライトビーズも足してください。
プルアップの他に注意すべき点は3つあります。
1.ブレッドボードの使用は避ける
ブレッドボードの使用は「SDカードが繋がらない」の諸悪の根源です。結線ミスが
原因のトラブルでブレッドボードで実験していたという証言が非常に多かったです。
ブレッドボードは確かに便利ですが、SDカードに限らず接触不良や接点抵抗の増大
によるさまざまなトラブルのもとに繋がります。面倒でも半田付けを行う癖をつけ
ましょう。とは言え何でもかんでも半田付けもだめです。丸端を圧着せず半田付け
とかもってのほかです#
同じ理由でSDカードソケットに接触圧が弱く金メッキの薄い中華製の安物を使うと
接触不良につながります。注意しましょう。接触不良の問題は状態が変わりやすく
不具合を特定しずらいので厄介です。
ぇ?お前ブレッドボードより酷いやっけつな使い方してるじゃんですって!?
わ…ゎたしは理解した上でやってるからいいんですよぅ!
2.結線はなるべく短く
これもSDカードに限らず基本中の基本ですね。SDIOの場合はMAX52MHz、通常使い
でも25MHzもの高速クロックが走ります。クロストークが起こらないような配線を
考慮しなければなりません。
とはいえ利便性も考えないといけません。私の場合はSTM32F4Discoveryで使う
場合はトレードオフでカードコネクタに対してこんな配置にしております。
配線長が10cmを超えてしまうとTCK=21MHzだと"あうち"です。なるべく太く短くを
目指しましょう。ちなみにS¥パワーメッシュ基板を使うと配線もしやすくGNDも
安定していろいろ楽ができるのでオススメです。
3.電源
電源は出来合いのボードを使う際の意外な落とし穴になります。SDカードの仕様と
STM32F4で使用できる全てのSDカードのモードを考慮すると最大200mA必要と
します。
STM32F4Discoveryの3.3V(はショットキDi経由してるので3Vくらいに落ちる)
から無理に引っ張ってきても"何とか"動きますが高速で信号のやり取りを
していると特に書き込み動作の際に不安定になってきます。
こんな場合は、フェライトビードを無暗に挟むよりもSDカード電源供給専用LDOを
用意してあげると効果的です。このとき使うLDOはSDカードの高速アクセス時の
大電流の吸い込み吐き出しに対応するためにセラミックコンデンサ対応の負荷の
過渡応答性に優れたものを選んでください。
STM32でSPI限定で使用する場合、仕様上最大で100mAあればよいので秋月さんの
ラインナップでいうとXC6202P332PR-GやTAR5SB33で十分です。勿論LDOの電圧
供給源(ほとんどの場合はUSBの+5V)は評価ボートと同じ系統にしてください。
ねむさいんは当然のごとく攻守ともに優れたLT1963Aです♥
↑秋月さんも私が指摘してた'A'付きにようやく気づいたようでMLCC対応と明記してます。
全然考を察していない内容になっちゃいましたが次回は既存のライブラリを駆使
してMMC/SDIOドライバを組んで実際に動かすソフト編をご紹介します。
STM32F4シリーズを使ってみる11 - STM32F429I-Discovery発動編 -
ぇー…前回のSTM32の記事の最後で新しいコードスニペットと称するどことなく
卑猥な名称のふれこみで発表されたSTM32CubeMXとそのF4シリーズのサポートを
行うCubeF4という新たなファームウエアライブラリに触れましたが…
私も移植を目指して頑張ってたのですが…
私の従来のいつものに当てはめようと思うと改造個所が多岐に及び、さらにコード
サイズとオーバーヘッドも増加してしまったので移植は見送りにして新規に作る
プロジェクトからCubeF4を使用する方針に逃げ変えました。
STM32CubeF4には抽象化がさら進められ、インスタンスという概念が追加され
ています。これがかなりの曲者で従来のF4シリーズで言うDSP_StdPeriph_Driver
ライブラリに相当する"STM32F4xx_HAL_Driver"はすべてこれの
使用を前提としていてさらにサイズが大きい構造体と併用しなければならない
のが分かりました。
これSRAMやFLASHのリソースが膨大にあるF4シリーズだからよいものをF1やF0
にも当てはめるのはかなりヤバいと思います。
私も過度の抽象化は良いとは思っていません。移植性を重視しすぎてせっかくの
マイコンの性能を引き出せないのであれば本末転倒です。
あんまし考えたくないのですが無理くそ全CPUの格差を埋めるべく抽象化を
目指し、そして失敗して結局ライブラリのバージョンが多岐に分かれて
しまったLPCOpenと同じ道を歩んでいる感じがします。
おそらくCube系のライブラリに遷移していくあたって大混乱が起こると
思いますね。無理にCubeへの遷移を煽る中途半端に発言力が持ってる人が
湧くのは容易に予測されます。学生さんなんかは自分のボスの"せんせい"
にまたCubeライブラリの使い方をwikiにまとめさせられると思います。
そういうこと言ってくる人らには"こんなことしてること自体が時間の無駄。
したけりゃ自分でやれ!"とはっきりNOを突き付けるべきです。
とはいえ私のぶろぐを見られている方は私よりも技術力がはるかに上の方
ばっかなのでそもそもこんなとこ見てない私が注意しなくても各自しっかり
対処出来することができるでしょうからぐだぐだ言いましたがやっぱし
私の杞憂かな〜と思います。
さて、前置きが長くなってしまいましたが以前から触れてきた
STM32F429I-DiscoveryのTFT-LCDをSPIではなくRGBインターフェースで
動かすことに成功しました。
前回は低速なSPIインターフェースでお茶を濁していました。
しかしSTM32F429シリーズにTFT-LCDに特化したグラフィックコント
ローラ(LTDC)とグラフィックに特化したDMAである(Chrom-ART Accelerator)
が搭載されているのでこれらの機能を使っていつものの再現を目指し
ようやく完成したわけです。
●STM32F429Iにあるグラフィック機能
私が説明するよりもこちらのPDFを見たら一目瞭然です。
LTDCに関してはフレームバッファとして確保したメモリアドレスにRGBの
データを書き込むだけで色の表示が可能です。また、STM32F429系では
SDRAMがサポートされているので容量を喰う画像データでも余裕で
取り扱うことができます。
Chrom-ART Acceleratorに関しては別名DMA2Dと称されていて文字通り
2Dグラフィック特化型DMAです。しかもデータ形式を変換してメモリ間
転送したり単一データを指定して転送する(レクタングルフィルに効果を
発揮)ことができます。
STM32F429I-Discoveryでは上記二つの機能を体験可能です。同ボードに
搭載されたTFTLCDの解像度は工作物ではメジャーな240x320となっています。
STM32のLTDC単体ではレクタングルを指定して書き込み時にアドレスを
自動インクリメントしながら連続で書き込める機能はない(DMA2Dで
解説します)ためアドレス計算は必須です。
具体的にいうとたとえば座標x,yにドットを打ちたい場合は基本的には先ず
以下のように座標を指定します
(RGB=565,1ドットあたり2Byteのデータを想定)。
lcd_c_buf_ptr = lcd_f_buf_ptr + 2*(x + (MAX_X*y));
lcd_c_buf_ptr :ドットデータを実際に書き込むメモリのアドレス
lcd_f_buf_ptr :フレームバッファとして確保したメモリ領域のベースアドレス
MAX_X :TFT-LCDのX軸の最大ドット数(F429I-Discoveryでは240と定義)
次にRGBデータcolourを書き込みます。
*(volatile uint16_t*)(lcd_c_buf_ptr) = colour;
lcd_c_buf_ptr +=2;
より具体的な実装はいつものの./lib/display/mcu_depend/src/lcdc_if_basis.cを
ご覧下さい。FONTX2等の描画ルーチンは完全にドット単位で行っていますが
MCUバスと外部LCDコントローラとの通信オーバーヘッドがなくなるので
ドット単位でも十分に早くなります。また、LTDCは2枚のレイヤーを使用可能で
さらにアルファブレンディングの透過効果も使用可能です。現状では単一の
レイヤとしてしか使用していませんがこちらも学習を重ねてモノにしていきます!
次にもう一つの目玉機能Chrom-ART Accelerator(以下DMA2D)です。
私のいつものではFillRect系のレクタングル指定塗りつぶしやレクタングル
指定の動画データ転送に使用しています。
基本的には通常のDMAと同じですがグラフィック特化なのでRGBデータを
格納するレジスタもあります。単一色描画では以下のように設定します。
※RGB565,黒色,全画面(240x320)塗りつぶしの場合
/* configure DMA2D */
DMA2D_DeInit();
DMA2D_InitStruct.DMA2D_Mode = DMA2D_R2M;
DMA2D_InitStruct.DMA2D_CMode = DMA2D_RGB565;
DMA2D_InitStruct.DMA2D_OutputGreen = (0x07E0 & COL_BLACK) >> 5;
DMA2D_InitStruct.DMA2D_OutputBlue = 0x001F & COL_BLACK;
DMA2D_InitStruct.DMA2D_OutputRed = (0xF800 & COL_BLACK) >> 11;
DMA2D_InitStruct.DMA2D_OutputAlpha = 0x0F;
DMA2D_InitStruct.DMA2D_OutputMemoryAdd = (uint32_t)lcd_f_buf_ptr;
DMA2D_InitStruct.DMA2D_OutputOffset = (MAX_X - 1));
DMA2D_InitStruct.DMA2D_NumberOfLine = MAX_X+1;
DMA2D_InitStruct.DMA2D_PixelPerLine = MAX_Y+1;
DMA2D_Init(&DMA2D_InitStruct);
/* Start Transfer */
DMA2D_StartTransfer();
/* Wait for CTC Flag activation */
while(DMA2D_GetFlagStatus(DMA2D_FLAG_TC) == RESET){}
lcd_f_buf_ptr :フレームバッファとして確保したメモリ領域のベースアドレス
MAX_X :TFT-LCDのX軸の最大ドット数(F429I-Discoveryでは240と定義
MAX_Y :TFT-LCDのY軸の最大ドット数(F429I-Discoveryでは320と定義
フォアグラウンドのレイヤーへ画像データを転送したい場合は以下のように。
/* configure DMA2D */
DMA2D_DeInit();
DMA2D_InitStruct.DMA2D_Mode = DMA2D_M2M;
DMA2D_InitStruct.DMA2D_CMode = DMA2D_RGB565;
DMA2D_InitStruct.DMA2D_OutputGreen = 0; /* M2M系転送の場合は使わない */
DMA2D_InitStruct.DMA2D_OutputBlue = 0; /* M2M系転送の場合は使わない */
DMA2D_InitStruct.DMA2D_OutputRed = 0; /* M2M系転送の場合は使わない */
DMA2D_InitStruct.DMA2D_OutputMemoryAdd = (uint32_t)lcd_f_buf_ptr;
DMA2D_InitStruct.DMA2D_OutputOffset = 1;
DMA2D_InitStruct.DMA2D_NumberOfLine = MAX_X+1;
DMA2D_InitStruct.DMA2D_PixelPerLine = MAX_Y+1;
DMA2D_Init(&DMA2D_InitStruct);
/* Configure default values for foreground */
DMA2D_FG_StructInit(&DMA2D_FG_InitStruct);
DMA2D_FG_InitStruct.DMA2D_FGMA = (uint32_t)p;
DMA2D_FGConfig(&DMA2D_FG_InitStruct);
/* Start Transfer */
DMA2D_StartTransfer();
/* Wait for CTC Flag activation */
while(DMA2D_GetFlagStatus(DMA2D_FLAG_TC) == RESET){}
lcd_f_buf_ptr :フレームバッファとして確保したメモリ領域のベースアドレス
MAX_X :TFT-LCDのX軸の最大ドット数(F429I-Discoveryでは240と定義
MAX_Y :TFT-LCDのY軸の最大ドット数(F429I-Discoveryでは320と定義
p :転送したい画像データのポインタ
と、従来のDMAと同じ感覚で使用が可能です。もっと汎用なDMA2Dの使用法は
同じくlcdc_if_basis.cをご参照ください。DMA2DはLTDCと組み合わせると
強力なレイヤー機能が使えるようになるでしょうね。
私のサンプルでは全く使いこなせてませんがー!

という訳でそれを踏まえたいつものをビルドして書き込み、
動作させたものが上の画像です。
静止画では違いが分からないと思いますが以前の8-bitSPIのみで動かしてた
ものとは描画速度がダンチですよ♥

惜しむらくはSTM32F429I-Discoveryに使用されているTFT-LCDが発色にちょっと
劣る点です。2014年現在では超高視野角液晶はすでにホビイストでも容易に
入手可能なのでそれに慣れた私にとってはあと一歩がほしいところと感じました
(多分最新の奴搭載したら値段跳ね上がるでしょうけど)。
●いつものFatFs+TFTLCD表示サンプルの細かい整備など

LTDC+DMA2Dに対応したついでに長らく放置していた全部載せSTM32F427IIT6基板の
プログラムも見直して安定化を図りました。いまさら気付いたのですが、新しい
STM32F4に存在するFMC(フレキシブル・メモリコントローラ)ではFSMCの
設定とは微妙に違っておりました…。

なんとFSMCでは存在しなかった変数が構造体に追加されていてこれを設定して
なかったせいで動作が不安定になっておりましたorzいまさら気付きましたが
まだFMC世代の新しいSTM32F4を使用されている方が少ないのか指摘されず
助かりましたうふふふふふふふf
また、この全部載せ基板はI2Cのコーデックも乗っていて音質は非常に悪い
ですがmp3やwaveファイルの再生も可能です。私のいつものプログラムでは
SDIO経由でSDカードのmp3ファイルなどを読みだして再生します
…がしかしビットレートが高いmp3の再生ではSDIOのデータ読みだしにDMAの
転送を行うとI2Sの方のサーキュラモードDMA転送と干渉しまくりあっと
いう間にオーバーフローになってエラーをはいて止まります。
という訳でこれを避けるためにSTM32F4でもFIFOのポーリングでの読み書きに
本格的に対応させることにしました。STマイクロ配布のSTM32F4のデモでは
ポーリングの読み書きはRead/WriteBlockしか対応しておらず非常に低速度
なのですがマルチブロック転送でもポーリングで読み書きできるように
改良しております。ポーリングでもDMAとほぼ同等の転送速度が得られたので
速度に関しては問題なしです。

…という訳でDMAあえてを使用せずポーリングによる読み出しだけで無事ビット
レートの高いmp3ファイルの再生も可能となりましためでたしめでたし!
(helixのフォルダにあるassembly.hのマクロが前回の機能追加で間違ってて
そもそもmp3ファイルが全く再生できなくなっていたのは見逃していただきたい)
●もいっこおまけ
私のいつものでは一部のmp3ファイルを再生したときにアーティスト/曲名情報
表示の際にゴミデータが表示されてしまっておりましたが、こちらも文字列ストア用の
バッファ(私のプログラムではCCM領域にあたる)を一旦ゼロクリアしてから
表示を行うようにしてバグを潰しております。

以前は変なゴミデータが表示されていましたが…、

修正後はこんな感じにすっきりです★
STM32F4シリーズを使ってみる9 - STM32F429I-Discovery準備編 -
STM32F429I-Discovery(製品名:STM32F429I-DISCO)、ようやく一般市場でも入手
しやすくなってきましたね。twitterのタイムライン見てると既に手に入れられた方、
使用されている方々の写真もびしばし上がってます。
私の方はというと…少数の方は更新に気づいていたとは思いますが、東海自然歩道へと
向かう前日の11/29にすでに既存のSTM32F4向けFatFs実装例に対応ボードの
一つとして基本部分を組み入れたソースコードを公開しております。
尤も429I-DiscoveryからはぢめてF4シリーズに触る奇特な人もいるかもしれないので
これがどういう物で何ができるか今一度軽く解説をさせていただきます。
※注意※
こことここを見て私のプロジェクトをビルド・デバッグ出来る環境拵えてることが
前提です!"意味が分からない"という方はご縁がなかったということで…
私のFatFs実装例(通称いつもの)は、ChaNさんのFatFsを中心に各マイコンの極めて
基本的な機能を網羅しています。STM32F4においては下に述べる機能を抑えています。
STM32F429I-Discoveryでも勿論使用しております。
1.GPIO操作
->LED点滅・SW入力
2.UART
->割り込みを使用したバッファリングされた送受信・stdioのリダイレクト
3.液晶モジュール
->MCUバスインターフェース(i8080,SPI,I2C)で駆動できる表示素子の操作
STM32F429I-DiscoveryはRGBインターフェースを使わずともSPI単体でも画像
データを送ることができます(遅いですが)。
4.FatFsのローレベル部の実装
->SPIやSDIO等とMMC/SDカードとのインターフェース。STM32F429I-Discovery
ではSPI4を使用しSPI互換モードでSD/MMCを動作させております。
5.外部RAMの制御
->STM32F407系はFSMCでSRAMを、STM32F429I-DiscoveryではFMCで
SDRAMを制御します。
んでもっていつものをSTM32F429I-Discoveryで動かしているところ
DMAの転送に使用される内蔵RAMが圧倒的に増加したので多少転送効率もよくなり、
その分ヒープ領域もたくさん取れるようになったのもうれしいです♥
画像はRAM馬鹿食いのgiflibを動かしてるところ
ファイラーの操作はタッチパネルより。STM32F429I-Discvoeryではコントローラに
内蔵のフィルタがあるSTMPE811が使用されているのでキャリブレーションも簡略化
しました。同基板ではVBATがVCC直結で外部にピンが出ておらずバックアップRAMが
機能しないので苦肉の策です…
タッチパネルからのファイラーの操作は上下でファイルポインタ移動、右で選択、
左でキャンセルと手抜k直感的です!
前回述べていた基礎のとっかかりに関しては対応完了です。このプロジェクトではまだ
STM32F429I-Discoveryの機能のすべてを使いこなしてはいません。以下の項目は目下
実装中のSTM32F429にしか使えない機能です。
1.LCDCを使用したRGBインターフェースによる高速な表示
->前回はやっけつで急ごしらえしましたが過去の資産をなんとか生かせるように
作り変えてます…こちらはもうすぐ完了…。
2.FatFsのファイル読み書き先をSDカードからUSBメモリに
->これ結構作業量ががが
こちらに関しては先人の作例も数多くあるので参考にさせてもらってます。
せっかくUSB-OTGがあるのにSDカードばっか使っててもったいないですから自身
の学習がてらに実装がんばります!
そういうわけでSTM32F429I-Discoveryのフル機能を駆使した作例のほうは
もう少しお待ちください。過去のSTM32F407系の作例と完全に切り離して
STM32F429I-Discovery専用のプロジェクトとして公開する予定です。
おまけ
1年以上前に購入した699元全部載せSTM32F407基板もSTM32F427IIT6に
換装してパワーアップさせました。
実はずーーーーっとF427系のチップが出るの待っていたのです!
こっちはこっちでF407系の資産生かしてなおかつ強化する方向で遊んでいきます。
PARTYHARD!(見えづらいですが左上)
もいっこおまけ
STM32F42xxx&STM32F43xxx系をJTAGから見た場合バウンダリスキャンのTAPIDが
40x系と違うものになってるのでOpenOCDで書き込もうとするとコけます。
この修正はgerritに投げてますのでOpenCOD0.9.0あたりで反映されるはずです。
OpenOCD小ネタ4 -LPC810に書き込みできないの-
>8PinDIPのARMマイコンLPC810、ようやく一般市場に出回る!
あのさぁ…私がLPC812を最初に手に入れてからもう約1年たったんですよぅ約1年!
それを今更…
こんなのこうしてやる!
STM32F0Discoveryが放つprobeに捕えられDiscloseされる哀れな
LPC810の姿。
ぐへへ32bitマイコンのくせにこんなにいやらしく足広げ(間隔:2.54mm)やがって♥
はぁ…はぁ…でもあんまし攻めると某ウイルスバスターのweb広告に出てくる
コワモテ893に似たNxPの中の人にこのぶろぐ焼き討ちされちゃいますのでこの辺に
しておいてあげます…
…さて戯言はこの辺にしといてOpenOCDにおいては既にねむいさんがLPC800
シリーズ向けのぱっちを提供し、STLink/V2,Versaloon(※要パッチ),
CMSIS-DAP(※要パッチ)の各デバッガハードウエアからSWDで書き込み可能です。
一応購入したからせっかくだから上記
写真のようにちょっと通電してSTLink/V2で書き込んでやろうかなと
思ったのですが…
> "C:¥Devz¥Coreutils¥bin¥make.exe" program
openocd -s C:/Devz/ARM/OCD/tcl -f interface/stlink-v2.cfg -f target/lpc810_hla_flash.cfg -c "mt_flash main.elf"
Open On-Chip Debugger 0.8.0-dev-00269-g30fb9dd-dirty (2013-11-19-20:50)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
none separate
Info : This adapter doesn't support configurable speed
Info : STLINK v2 JTAG v17 API v2 SWIM v0 VID 0x0483 PID 0x3748
Info : Target voltage: 2.891327
Info : lpc810.cpu: hardware has 4 breakpoints, 2 watchpoints
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0xf1000000 pc: 0x1fff0008 msp: 0x10000ffc
auto erase enabled
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x10000004 msp: 0x100000c8
Warn : not enough working area available(requested 512)
Error: no working area specified, can't write LPC2000 internal flash
Error: error writing to flash at address 0x00000000 at offset 0x00000000
Runtime Error: C:/Devz/ARM/OCD/tcl/target/lpc810_hla_flash.cfg:112:
in procedure 'mt_flash'
in procedure 'flash' called at file "C:/Devz/ARM/OCD/tcl/target/lpc810_hla_flash.cfg", line 112
make: *** [program] エラー 1
> Process Exit Code: 2
> Time Taken: 00:01
↑あれれ…書けない…だめじゃん(LPC812は問題なし)
まさか…

lpc2000.c中でIAPコマンド51番を実行する時にバッファサイズを指定するの
ですがLPC800シリーズは一律1024Byteに減少させていました(LPC2000.cの
デフォルトは4096Byte)。
LPC810のSRAMサイズは1024Byteなのでこれでも足らないみたいです。
いろいろ試した結果、実サイズの4分1の256Byteまで落として成功しました。
> "C:¥Devz¥Coreutils¥bin¥make.exe" program
openocd -s C:/Devz/ARM/OCD/tcl -f interface/stlink-v2.cfg -f target/lpc810_hla_flash.cfg -c "mt_flash main.elf"
Open On-Chip Debugger 0.8.0-dev-00269-g30fb9dd-dirty (2013-11-19-20:50)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
none separate
Info : This adapter doesn't support configurable speed
Info : STLINK v2 JTAG v17 API v2 SWIM v0 VID 0x0483 PID 0x3748
Info : Target voltage: 2.872920
Info : lpc810.cpu: hardware has 4 breakpoints, 2 watchpoints
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0xf1000000 pc: 0x1fff0008 msp: 0x10000ffc
auto erase enabled
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x10000004 msp: 0x100000c8
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x10000004 msp: 0x100000c8
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x10000004 msp: 0x100000c8
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x10000004 msp: 0x100000c8
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x10000004 msp: 0x100000c8
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x10000004 msp: 0x100000c8
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x10000004 msp: 0x100000c8
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x10000004 msp: 0x100000c8
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x10000004 msp: 0x100000c8
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x10000004 msp: 0x100000c8
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x10000004 msp: 0x100000c8
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x10000004 msp: 0x100000c8
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x10000004 msp: 0x100000c8
wrote 3072 bytes from file main.elf in 0.749995s (4.000 KiB/s)
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x1000002e msp: 0x10000ffc
verified 2400 bytes in 0.062500s (37.500 KiB/s)
shutdown command invoked
> Process Exit Code: 0
> Time Taken: 00:02
↑cmd51のバッファサイズを下げると書き込みパフォーマンスが下がって
しまうのですがLPC810はフラッシュのサイズも4096バイトしかないので
問題ないです。

なおLPC810は8PinDIPですがお外に出てない足がある模様です。ないはずの
ピンにアクセスするとちゃんと出力が変化しました。上画像のデバッグでは
LPC812のプロジェクトをスタックとチェックサムだけLPC810用に書き換えた
やっけつVerです。
そんなわけで今回の修正分を盛り込んだOpenOCDバイナリはおきぱに反映しました。
珍しくメールやコメントでバグのご指摘もらう前に自分で気づきましたよ!
OpenOCDのgerritにも今レビュー中のSTM32F4のパッチがマージされたら反映させます。
20140109追:
ぱっち提出しました。
20140112追:
マージされました♥
LPC810は同じ8ピンDIPマイコンのAVRの牙城を崩すことができるのか?
それは時間が経てばおのずとわかると思います。
20230903追:
LPC810は無かったことになり、202309現在ではSTM32G0,STM32C0が攻勢を
強めております。特にSTM32C0は8マイコンを駆逐する勢いです!
20230903追:
おまけ

STM32F429I-Discoveryいじりは基本のいつものが実装できるとこまで進みました。
あと数日くらいでファイル公開予定です。実物持ってる人はmakefileの定義を
429IDiscovery向けに変えててためしてみてください。ファイルの読み書きは
SPI接続のMMCなので別途sdカードスロット取付等の配線作業が必要です。

SPIの4つの信号線は22〜47kohmでプルアップを忘れずに!
また429I-Dsicoveryはオンボの+3.3Vレギュレーターが550mAまで出せるので
SDカード一枚程度なら別途3.3Vの電源を用意する必要もないです。

↑しかし液晶載せたおかげでSTM32F4Discoveryよりでかい…
その液晶がIPSやMVAじゃなく普通の視野角が狭い液晶なのは減点ポインツです#
なにはともあれこれをたたき台にしてSTM32F429I-Discovery専用に改造
しまくっていきましょう!
STM32F4シリーズを使ってみる8 - STM32F429I-Discovery接触編 -
デン!
デデン!
…ッツついに来ましたよ…!最強に強まったSTM32F4が…!
後ろに見えるSTM32F437IIT6も後日に…
STM32F429I-Discoveryは現時点のSTMマイコンの中で最強種のSTM32F429とそれが
サポートする64MbitのSDRAMとRGBインターフェースが利用できるTFT-LCDまで
搭載されたまさにねむいさんのために作られたようなボードです!
※正式名称は「STM32F429I-DISCO」だそうです。
STM32F429/439シリーズはRGBインターフェースのTFT-LCDドライバとSDRAMを
サポートするFMC(FSMCからSが取れた)を持ち、最高クロック180MHzで動作する
Cortex-M4Fのコアを持つマイコンです。
ついにSDRAMが…♥もうヒープサイズ気にしなくていいんじゃあんちゃん
ちなみにTFT-LCDドライバのフレームバッファ用にも使われるそうです。
とりあえず電源を入れてみるとSTLink/V2が認識してemWinと呼ばれる小洒落たGUIが
走ります。凄いもんだ…基板上に実装されたTFT-LCDの解像度は240x320です。
タッチするといろいろメニューが選択できます。本来はUSBメモリ等の記憶媒体を
挿しておくようになってるみたいですね。
今は168MHzで動いてるらしいです。
…で、
一通りデモプログラムを確認したのであとはおなじみOpenOCDで内蔵フラッシュメモリ
のバックアップをとり(2MBあるので5分くらいかかりましたよ!) 前もって予習して
いたLEDチカチカプログラムを書き込んで一発動作を確認♥
おきぱのSTM32F4向けサンプルの定義をほんの少し変えるだけで事は済みました…。
お次は目玉のTFT-LCDです。ねむいさんはこっちももちろん予習済です。
STM32F42x/43x系ではUSB用SRAMの容量拡張のほかSPIやI2C等の基本となる
ペリフェラルも数が大幅に増えていて更なる柔軟な回路構成が可能となって
います。
それではここらへんでいつものを…このTFT-LCDのコントローラICは定番の
ILI9341なのでRGBインターフェースへの応用も楽勝ですね♥
今回表示したのはねむいさんの頂き物のイラス…イラストじゃなくて3D絵です。
あ○たご、抜錨しま〜す♪ぐふふ♥
↑ねむいさんが何のキャラのコスしてるのか最近分かったです…鈍い…
↑ねむいさんて艦これ(ブラウザゲー)やらないの?とよく本職してる時に尋ねら
れますが、6年前からずっとゴルロア続けてますし今もっともアツいブラゲに
嵌ってる(作業的な意味で)のでさすがに他のにまで手を出す余裕がないです…。
なお、びぃぶろ君に確実に怒られると思われるえろすな個所はトリミング済みなので
安心してご鑑賞ください。
20131114追:
タッチパネルコントローラはi2cのSTMPE811です。
こちらも予習済なのですんなりいけました!
というわけで今回はSTM32F429I-Discoveryのファーストタッチをご報告させて
いただきました。基本的な部分は初期のSTM32F4とほとんど一緒なので、
F4Discoveryからの移植はそこまで難しくないと感じました。
まずはFatFsとChaNさんのファイラーを完全に移植させます。12月上旬には
私のおきぱに新しいラインアップが追加されると思います。
Project Examples and Misc Files
ねむいさん専用のFatFs中心のサンプルコード・プログラム置場です。
私が使いやすいようにGCC環境に勝手にポーティング&改造してあります。
文書の記述間違い・バグを見つけた場合は勝手に修正しています。
太字のリンクは更新頻度高。試される場合は自己責任でお願いします。
Dear All
Here is my ChaN's FatFs implementation examples.
Those projects are suitable to build in GNU-GCC environment.
If you have any question,see here to contact me.
●ARM
(Confirmed on 64bit Win7,8,10,11 by ARM-GCC)
ビルドの仕方はこちら
Building Method on Native Windows Environment is Here.
-Cortex-M7
STM32H7xx(STM32H747I-Discovery supported!)
(CubeH7:V1.12.0/HAL:V1.11.5)
(+ HelixMP3/AAC,libjpeg,libpng and giflib decode example)
*TFT Control Example with ChaN's FatFs(SDMMC-Interface)
It supports SDXC and eMMC!
STM32F7xx(STM32F769I/746G-Discovery supported!)
(CubeF7:V1.15.0/HAL:V1.2.9)
(+ HelixMP3/AAC,libjpeg,libpng and giflib decode example)
*TFT Control Example with ChaN's FatFs(SDMMC-Interface)
It supports SDXC and eMMC!
-Cortex-M33
STM32H5xx(STM32H563ZI-NUCLEO supported!)
(CubeH5:V1.1.0/HAL:V1.1.0)
(+ libjpeg,libpng and giflib decode example)
*SPI-TFT Control Example with ChaN's FatFs(SDMMC-Interface)
It supports SDXC and eMMC!
STM32L5xx(STM32L552ZE-Q-NUCLEO supported!)
(CubeL5:V1.5.0/HAL:V1.5.0)
20240101更新停止
(+ libjpeg,libpng and giflib decode example)
*SPI-TFT Control Example with ChaN's FatFs(SDMMC-Interface)
It supports SDXC and eMMC!
-Cortex-M4F
STM32F4(STM32F407ZGT6/PowerAVR-RedBull Compatible Circuit
& STM32F437IIT6/盈钰電子STM32F4xxIxT6开发板互換
& STM32F407VGT6/STM32F4Discovery
& STM32F429ZIT6/STM32F429I-Discovery are also supported!)
(FWLib:V1.8.0)
(+ HelixMP3/AAC,libjpeg,libpng and giflib decode example)
*TFT/OLED Control Sample with ChaN's FatFs(SDIO&SPI-Interface)
It supports SDXC and eMMC!
STM32F401xx(STM32F401RET6/NUCLEO-F401RE Compatible Circuit)
(CubeF4:V1.24.1/HAL:V1.7.6)
*KickStart & I2C-LCD/OLED and many Devices example
STM32F334(STM32F334R8T6/NUCLEO-F334R8 Compatible Circuit)
(CubeF3:V1.11.0/HAL:V1.5.3)
*KickStart & I2C-LCD/OLED many Devices examples!
LPC4088(LPC4088/EA4088 Board Semi-Compatible Circuit)
*ChaN's FatFs Sample(SDMMC-Interface)
It supports SDXC and eMMC!
LPC4357(盈钰電子LPC4357开发板互換)
*ChaN's FatFs Sample(SDMMC-Interface)
It supports SDXC and eMMC!
LPC4330(LPC4330-Xplorer Compatible Circuit)
20150912更新停止
*Dual/SingleCore-KickStart
LM4F120H5QR(Stellaris Launchpad Compatible)
20150912更新停止
*KickStart
-Cortex-M4
K20(MK20DX32VLF5)(Bare-Metal)
*KickStart
-Cortex-M3
STM32F103(STM32F103VET6/STM32 Primer2)
(FWLib:V3.6.1 ,USBLib:V4.0.0 ,
FatFs STM32F1 SDIO-Interface Imprementation)
*Bare-Metal GPS & GNSS-Tracker using ChaN's FatFs
EFM32TG822F32(Bare-Metal for TinyGecko)
*LED-Blink & UART
LPC13xx(LPC1347/LPCXPresso Compatible Circuit)
20150912更新停止
*KickStart
STM32F2(STM32F207ZGT6/PowerAVR-RedBull Compatible Circuit)
20150912更新停止
(FWLib:V1.1.2)
*(Deprecated) TFT/OLED Module Control Sample with ChaN's FatFs(SDIO-Interface)
STM32F107(STM32F107VCT6/CQ-STARM-JUNKBOARD Compatible Circuit)
20150912更新停止
(FWLib:V3.6.1 ,USBLib:V4.0.0)
*(Deprecated) TFT/OLED Module Control Sample with ChaN's FatFs(SPI-Interface)
STM32VL(STM32F100RBT6/STM32VL-Discovery Compatible Circuit)
20150912更新停止
(FWLib:V3.6.1)
*(Deprecated) TFT/OLED Module Control Sample with ChaN's FatFs(STM32VL SPI-Interface)
STM32L(STM32L152RBT6/STM32L-Discovery Compatible Circuit)
20150912更新停止
(FWLib:V1.1.1)
*(Deprecated) TFT/OLED Module Control Sample with ChaN's FatFs(STM32L SPI-Interface)
MB9BF618T(FRK-FM3-GARBAGEBOARD Compatible Circuit)
20150924更新停止
*(Deprecated) LED-Blink & UART
*(Deprecated) TFT/OLED Module Control Sample with ChaN's FatFs(MFS SPI-Interface)
MB9AF112K(Bare-Metal)
20150912更新停止
*(Deprecated) LED-Blink & UART
LPC177x/8x(LPC1788/EA1788 Board Semi-Compatible Circuit)
20160331更新停止
*(Deprecated) ChaN's FatFs Sample(MCI-Interface)
-Cortex-M0+
STM32U083xx
(STM32U083RCT6-NUCLEO Compatible Circuit)
*KickStart & I2C-LCD/OLED and many Devices examples!
STM32C031xx/STM32C011xx
(STM32C031C6-NUCLEO/STM32C011XX-DK Compatible Circuit)
*KickStart & I2C-LCD/OLED and many Devices examples!
STM32G03xxx(STM32G0316-DISCO Compatible Circuit)
*KickStart & I2C-LCD/OLED and many Devices examples!
LPC824(LPC824/LPCXPresso Compatible Circuit)
*KickStart
KL25(MKL25Z128VLK4/FRDM-KL25Z Compatible Circuit)
*KickStart
KE02(MKE02Z64VQH2/FRDM-KE02Z Compatible Circuit)
*KickStart
EFM32ZG222F32(For EFM32ZG-STK3200)
*LED-Blink & UART
STM32L05xxx(STM32L053C8/STM32L0538-Discovery Compatible Circuit)
*KickStart
LPC812(LPC812/LPCXPresso Compatible Circuit)
20160331更新停止
*(Deprecated) KickStart
KL05(MKL05Z32VFM4/FRDM-KL05Z Compatible Circuit)
20170629更新停止
*KickStart
-Cortex-M0
STM32F03x(STM32F030R8T6/NUCLEO-F030R8 Compatible Circuit)
(CubeF0:V1.7.0/HAL:V1.5.0)
*KickStart & I2C-LCD/OLED and many Devices examples!
NUC120LE3(NUC120LE3AN/NuTiny-SDK-NUC120 Compatible Circuit)
*KickStart
M0516LBN(NUC120LE3AN/NuTiny-SDK-M0516 Compatible Circuit)
*KickStart
LPC11u35(LPC11U35/501 CMSIS-DAP Compatible Circuit)
*KickStart
STM32F05x(STM32F051R8T6/STM32F0-Discovery Compatible Circuit)
(CubeF0:V1.3.0)
20150922更新停止
*(Deprecated) KickStart
LPC11xx(LPC1114/LPCXPresso and MARY and DIP28-package Compatible Circuit)
20150922更新停止
*(Deprecated) KickStart
-ARM7TDMI
LPC23xx(LPC2388/CQ-FRK-NXP-ARM-JUNKBOARD Compatible Circuit)
20181222更新停止
*(Deprecated) TFT/OLED Module Control Sample with ChaN's FatFs(MCI-Interface))
●AVR
-AVR-Dx
AVR128DA48 CuriosityNANO
(and AVR128DB28,AVR64DD28 baremetal supported)
*UART & Internal Temperature Test
-XMEGA
ATxmega128A1/Atxmega128A1U
20240101更新停止
*(Deprecated)TFT/OLED Module Control Sample with ChaN's FatFs(SPI-Interface)
●Windows Tools and Misc
- OpenOCD for Windows
ocd-0.12.0+dev-00846-geb6f2745b(built on 20250211)
Windows 32bit Binary Nemuisan's Special Version
*Supported OS*
->Windows7,8,10,11(x86 or x64)
->WinXP last version is here.
*Supported Debugger Hardware*
->JTAGKey,JTAGkey2 and many FT2232 Devices(WinUSB)
->JLink(WinUSB)
->JLink On LPCLink2(WinUSB)
->JLink On LPCXpressoV2/V3(WinUSB)
->JLink-OB(WinUSB)
->STLink,/V2,/V2-1 and /V3(STMicro's Distributed USB-Driver/WinUSB)
->Versaloon(WinUSB)
->TI-ICDI(TI's Distributed USB-Driver/WinUSB)
->CMSIS-DAP(Generic USB-HID/Mbed VCP Driver)
->Nulink(Generic USB-HID)
*OPENOCD FOR WINDOWS BINARY HERE!
SHA-1 HASH:cee09e97dd40fcb6a82ecdfc367c913466447cbe
OpenOCD(0.13.0)'s Specific MCU cfg Files for Flash Programming=
*OpenOCD spesific MCU-Aimed cfg files Nemuisan Special
↑Notice:Already contained in my OpenOCD Binary.
For self build users & linux users only.
OpenOCD(0.13.0)'s Patch Set(Useful Functions & Fix Patches)
*OpenOCD Patch Set Nemuisan Special
↑For self build users & linux uses only.
- AVRDUDE for Windows
AVRDUDE for Windows v8.0 32bit Binary(built on 20241231)
Nemuisan's Special Version
Supported OS
->Windows7,8,10,11(x86 or x64)
*AVRDUDE FOR WINDOWS BINARY HERE!
-SPIROM Writer Tools
FLASHROM for Windows(SPI-ROM Writer) (built on 20240923)
1.5.0-devel (git:v1.4.0-49-gb6b0eba3) 32bit Binary
For FT2232/FT232H Devices(WinUSB)
*Flashrom_v1.4.0-49-gb6b0eba3.7z
-JTAG Tools
UrJTAG for Windows v2021.03 #d9a2943f(built on 20240908)
*urjtag.tar.gz
SupportedHardware
->JTAGKey,JTAGkey2 and many FT2232 Devices(WinUSB)
->JLink(WinUSB)
->JLink On LPCLink2(WinUSB)
-JTAG Hardware
-Schematic of JTAGkey2 Compatible Circuit Rev.5
(Supports 1.4〜5.5V WideVoltage Range)
*JTAGKey2CompatibleCircuit_Rev.5
かつてこの欄でFirefox拡張「合間合間に」のバックアップを公開していました。
20191124更新:
waterfox向けの「合間合間に」のふたばの仕様変更対応版をサルベージしましたので
こちらでも公開します。
※「赤福Firefox版」/「合間合間に」は有志の方がGitHubにて管理されています。
※unmhtはこちらに残っています。
免責・連絡先は↑のリンクを
↓SNSもやってます↓
powered by まめわざ- ARM/STM32 (117)
- OpenOCD (27)
- ARM/NxP (34)
- ARM/Cypress (5)
- ARM/Others (3)
- ARM/Raspi (1)
- AVR (13)
- FPGA (4)
- GPS/GNSS (19)
- MISC (84)
- STM8 (2)
- Wirelessなアレ (16)
- おきぱ (1)
- ブラウザベンチマーク (28)
- 日本の自然歩道 (27)
- 中部北陸自然歩道を往く -砺波平野の県境を駆け抜ける!-
⇒ ねむい (12/18) - 中部北陸自然歩道を往く -砺波平野の県境を駆け抜ける!-
⇒ ひかわ (12/15) - STM32U0はぢめました
⇒ ねむい (08/07) - STM32U0はぢめました
⇒ ひかわ (07/28) - STM32H5を使ってみる3 -待ち受ける初見殺しの罠たち-
⇒ ねむい (05/17) - STM32H5を使ってみる3 -待ち受ける初見殺しの罠たち-
⇒ どじょりん (05/16) - STM32H5を使ってみる3 -待ち受ける初見殺しの罠たち-
⇒ どじょりん (05/16) - いろいろ試す61(と今年の反省会)
⇒ ねむい (01/02) - いろいろ試す61(と今年の反省会)
⇒ ひかわ (01/02) - いろいろ試す61(と今年の反省会)
⇒ ひかわ (01/01)
- March 2025 (1)
- February 2025 (1)
- January 2025 (1)
- December 2024 (2)
- November 2024 (1)
- October 2024 (1)
- September 2024 (1)
- August 2024 (1)
- July 2024 (1)
- June 2024 (1)
- May 2024 (1)
- April 2024 (1)
- March 2024 (1)
- February 2024 (2)
- January 2024 (1)
- December 2023 (4)
- November 2023 (2)
- October 2023 (2)
- September 2023 (1)
- August 2023 (2)
- July 2023 (1)
- June 2023 (2)
- May 2023 (3)
- April 2023 (1)
- March 2023 (1)
- February 2023 (1)
- January 2023 (1)
- December 2022 (2)
- November 2022 (1)
- October 2022 (1)
- September 2022 (1)
- August 2022 (1)
- July 2022 (1)
- June 2022 (1)
- May 2022 (1)
- April 2022 (1)
- March 2022 (1)
- February 2022 (1)
- January 2022 (1)
- December 2021 (2)
- November 2021 (2)
- October 2021 (1)
- September 2021 (1)
- August 2021 (1)
- July 2021 (1)
- June 2021 (1)
- May 2021 (1)
- April 2021 (1)
- March 2021 (1)
- February 2021 (1)
- January 2021 (1)
- December 2020 (3)
- November 2020 (1)
- October 2020 (1)
- September 2020 (1)
- August 2020 (1)
- July 2020 (1)
- June 2020 (2)
- May 2020 (1)
- April 2020 (1)
- March 2020 (1)
- February 2020 (1)
- January 2020 (1)
- December 2019 (3)
- November 2019 (1)
- October 2019 (1)
- September 2019 (2)
- August 2019 (1)
- July 2019 (1)
- June 2019 (1)
- May 2019 (1)
- April 2019 (1)
- March 2019 (1)
- February 2019 (1)
- January 2019 (1)
- December 2018 (3)
- November 2018 (2)
- October 2018 (1)
- September 2018 (1)
- August 2018 (1)
- July 2018 (1)
- June 2018 (1)
- May 2018 (1)
- April 2018 (2)
- March 2018 (1)
- February 2018 (1)
- January 2018 (1)
- December 2017 (2)
- November 2017 (2)
- October 2017 (1)
- September 2017 (1)
- August 2017 (1)
- July 2017 (1)
- June 2017 (1)
- May 2017 (1)
- April 2017 (1)
- March 2017 (2)
- February 2017 (2)
- January 2017 (2)
- December 2016 (7)
- November 2016 (2)
- October 2016 (2)
- September 2016 (1)
- August 2016 (1)
- July 2016 (1)
- June 2016 (1)
- May 2016 (2)
- April 2016 (1)
- March 2016 (2)
- February 2016 (1)
- January 2016 (1)
- December 2015 (3)
- November 2015 (1)
- October 2015 (3)
- September 2015 (2)
- August 2015 (2)
- July 2015 (3)
- June 2015 (3)
- May 2015 (4)
- April 2015 (2)
- March 2015 (4)
- February 2015 (1)
- January 2015 (3)
- December 2014 (3)
- November 2014 (2)
- October 2014 (1)
- September 2014 (2)
- August 2014 (2)
- July 2014 (3)
- June 2014 (2)
- May 2014 (1)
- April 2014 (1)
- March 2014 (4)
- February 2014 (4)
- January 2014 (3)
- December 2013 (5)
- November 2013 (4)
- October 2013 (3)
- September 2013 (2)
- August 2013 (2)
- July 2013 (2)
- June 2013 (3)
- May 2013 (2)
- April 2013 (2)
- March 2013 (2)
- February 2013 (2)
- January 2013 (3)
- December 2012 (4)
- November 2012 (2)
- October 2012 (2)
- September 2012 (4)
- August 2012 (1)
- July 2012 (3)
- June 2012 (2)
- May 2012 (3)
- April 2012 (3)
- March 2012 (2)
- February 2012 (3)
- January 2012 (3)
- December 2011 (5)
- November 2011 (3)
- October 2011 (2)
- September 2011 (2)
- August 2011 (2)
- July 2011 (2)
- June 2011 (2)
- May 2011 (2)
- April 2011 (2)
- March 2011 (2)
- February 2011 (2)
- January 2011 (3)
- December 2010 (7)
- November 2010 (1)
- October 2010 (1)
- September 2010 (1)
- August 2010 (3)
- July 2010 (4)
- May 2010 (1)
- April 2010 (2)
- March 2010 (2)
- February 2010 (2)
- January 2010 (3)
- December 2009 (3)
- November 2009 (8)
- October 2009 (7)
- September 2009 (5)
- August 2009 (4)
- July 2009 (6)
- June 2009 (6)
- May 2009 (14)
- January 1970 (1)
Copyright(C) B-Blog project All rights reserved.