バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
FatFs WinシミュレーションでSDカードに直接制御する話。
今回は「FatFsでパーティション分け」。
FatFsパーティション分けの前準備としてのコード修正を行う。
登場人物
博識フクロウのフクさん
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
FatFsパーティション分け用のコード修正
で、今回は急遽思い付きで追加された
「FatFsでパーティション分け」ってことだけど、
具体的にはどうするのかな?
まず前準備としてソースコードの修正がいるね。
え゛?
といってもVolToPart配列をちょっと弄るだけなんだけどねー。
VolToPart配列を変更
main.cにVolToPart配列があるんで、これを以下に書き換える。
/* This is an example of volume - partition mapping table */
PARTITION VolToPart[FF_VOLUMES] = {
{0, 1}, /* "0:" ==> 1st partition on PD#0 */
{1, 0}, /* "1:" ==> PD#1 */
{1, 1}, /* "2:" ==> PD#1 PT1*/
{1, 2}, /* "3:" ==> PD#2 PT2*/
{1, 3}, /* "4:" ==> PD#3 PT3*/
{1, 4}, /* "5:" ==> PD#4 PT4*/
{5, 0} /* "6:" ==> PD#5 */
};
ソースコード修正ってこれだけ?
これだけ。
なんだ。
身構えて損した。
VolToPart配列変更内容確認
で、この変更はどういう意図があるの?
VolToPart配列については以前解説はしてある。
ここでやったね。
たしかPARTITION構造体がポイントだったかな?
typedef struct {
BYTE pd; /* Physical drive number */
BYTE pt; /* Partition: 0:Auto detect, 1-4:Forced partition) */
} PARTITION;
あ、そっか!
物理ドライブ1に対して4つのパーティションを認識できるような設定になっているってことか!
でも、VolToPart配列のパラメータの
{1, 0}, /* "1:" ==> PD#1 */
ってのは?
パーティション指定としては1~4で、
0はAuto detectってなってるけど。
結果的には{1, 1}と同じになるんで要らないと言えば要らないけど、とりあえず置いておいただけだ。
まぁパーティション分け時の指定で使うかもくらいかな。
まぁパーティションを意識しない時とかも想定すると、あった方が良いってことかな。
そういうことだね。
まとめ
まとめだよ。
- FatFsパーティション分け用のコード修正。
- VolToPart配列を変更するだけ。
- VolToPart配列で物理ドライブ1に4つのパーティションを認識できるように設定。
- パーティション1~4。
- パーティション0は自動検知でパーティション1相当になる。
- パーティション分けの時のみ使用。
バックナンバーはこちら。
コメント