【FatFs】車載外部ストレージ その129【SDカード直接制御⑫】

【FatFs】車載外部ストレージ その129【SDカード直接制御⑫】 車載外部ストレージ

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

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました