MSC+CDCのドライバを使ってデータフラッシュ(AT45DB161D)への書き込みをおこな>うと、やたらと時間がかかる問題について調べてみました。 まずは、書き込み時間の計測から。
フラッシュの容量が2MBなので、これに近いサイズのファイルをコピーしてみました。 MacOS上でcpコマンドに続いてsyncすることでフラッシュへ書き出しましたが、およそ55秒もかかりました。33KB/secしか出ていないことになります。
フラッシュへの書き込みの際には、書き込もうとするページをいったん消去してから、書き込むという2段階の操作が必要となります。書き込みも時間がかかりますが、それ以上に時間がかかるのが消去です。チップ全体を消去するにはおよそ20秒が必要でした。 データフラッシュには消去と書き込みの一連の処理を一度にやってくれるページ書き込みコマンドがあるので、これを使っているのですが、改めてデータシートを読んで所要時間を確認してみるとページあたり平均で17msとなっています。1ページは512バイトなので、試験対象のファイルの書き込みには1855478/512*17=61607msとなり、61秒が必要となる計算です。遅いと思っていましたが、平均以上の速度で書き込めていたようです。ページ書き込みだけのコマンドであれば、平均3msしかかからないので、あらかじめ消去済みであれば、書き込み速度は大幅に向上することになります。
データを連続して書き込むような用途であれば、あらかじめ消去しておいてから書き込むようにするべきでしょう。今回は、フォントデータ格納が目的なので、一度書き込んでしまえば変更することもないので、原因がわかったことに満足して作業を進めることにします。
フラッシュの容量が2MBなので、これに近いサイズのファイルをコピーしてみました。 MacOS上でcpコマンドに続いてsyncすることでフラッシュへ書き出しましたが、およそ55秒もかかりました。33KB/secしか出ていないことになります。
フラッシュへの書き込みの際には、書き込もうとするページをいったん消去してから、書き込むという2段階の操作が必要となります。書き込みも時間がかかりますが、それ以上に時間がかかるのが消去です。チップ全体を消去するにはおよそ20秒が必要でした。 データフラッシュには消去と書き込みの一連の処理を一度にやってくれるページ書き込みコマンドがあるので、これを使っているのですが、改めてデータシートを読んで所要時間を確認してみるとページあたり平均で17msとなっています。1ページは512バイトなので、試験対象のファイルの書き込みには1855478/512*17=61607msとなり、61秒が必要となる計算です。遅いと思っていましたが、平均以上の速度で書き込めていたようです。ページ書き込みだけのコマンドであれば、平均3msしかかからないので、あらかじめ消去済みであれば、書き込み速度は大幅に向上することになります。
データを連続して書き込むような用途であれば、あらかじめ消去しておいてから書き込むようにするべきでしょう。今回は、フォントデータ格納が目的なので、一度書き込んでしまえば変更することもないので、原因がわかったことに満足して作業を進めることにします。