バックナンバーはこちら。
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相当になる。
- パーティション分けの時のみ使用。
バックナンバーはこちら。
コメント