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