FAT12

На соседней странице страницы мы наконец-то добились ,что наш STM32 прикинулся флэшкой . В качестве реальной флэш памяти используем микросхему AT45 на плате STM32.

В результате наша флэшка нормально работает : мы ее отформатировали.

фотка 1

Появился к каталог System Volume Information, внутри каталога два файла IndexerVolumeGuid и WPSettings.dat .

Далее мы создали в корне файл 1111111.txt и внутри ему написали 11111111... (много единиц).

Как узнать в STM32 , что получен файл прошивки проверить его и запустить процесс перепрошивки самого контроллера?

Во первых я даже понятия не имею , что там Windows написАла в память AT45 после форматирования.

Первая страница (512К) : Загрузочный сектор

фотка 2

Пытаемся разобраться какая это FAT?

0x0036 [8]: SystemID тип файловой системы 46 41 54 31 32 20 (как у нас) наверное это FAT16. По интернету я не понял какой здесь должен быть ID. В свойствах диска просто FAT и все.

Ха-Ха прочитайте 46 41 54 31 32 20 : 'FAT12 ' - вот оно как. Почему Windows форматирует в FAT12 ? Наверное потому , что размер крохотный.
FAT12 выбирается, если на носителе не более 2^12 = 4096 секторов.

Значение для каждой ячейки считаются справа налево, например если написано 00 02h, то на самом деле это 02 00h, т.е. 512 в десятичной системе исчисления.

фотка 3

для FAT12

0x000B [2] : 00 02 (=00200=512) Число байтов в секторе (всегда 512)
0x000D [1] : 01 - количество секторов в кластере
0x000E [2] : 02 00 (= 0002 ) ReservedSectors = Загрузочная область 2 сектора (и правильно вторая страница (сектор) у нас нулями забита)
0x0010 [1] : 02 - количество FAT таблиц
0х0013 [2] : 00 04 (=0x0400=1024) Общее число секторов на диске !
0x0015 [1] : F8 тип устройства
0x0016 [2|4] : 03 00 (= 0003) SectorPerFat - количество секторов в FAT области , т.е. 3 шт.


Третий сектор это FAT1

00000420 : F8 FF FF FF FF FF FF 6F 00 FF 0F 00 00 00 00 00 øÿÿÿÿÿÿo ÿ      
00000430 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 
00000440 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 
00000450 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 
00000460 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 
00000470 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 
00000480 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Вот тут без поллитра не понять , что в FAT12 есть что

Внимание на индекс кластера отводится 1.5 байта.

Всегда сначала F8 FF FF . Это 2 зарезервированных номера кластера.

Маска yz Zx XY для 3 байт

Далее все делится по полтора байта (12бит и FAT тоже 12) :

FF 6F 00 == yz Zx XY== FFF 006
FF 0F 00 == yz Zx XY== FFF 000

Остается только догадываться какой добрый человек придумал использовать такую маску...

FFF - конец файла
006 - номер следующего кластера для файла 1111111.txt
FFF - конец файла 1111111.txt
000 - пусто , не занятое место.
....................
и так далее...


Еще 2 сектора относятся к FAT1.

Потом еще 3 сектора на FAT2 , она дублирует FAT1.

Корневой каталог

0x0011 : RootEntries загрузочного сектора = 00 02, т.е. 0x0200 = 512 .

Корневой каталог - это получается у нас 512 дескрипторов по 32 байта (т.е. 512 файлов в корне может быть , я лично не проверял) ,т.е. 512 * 32 = 16384 байт.

Вот его начало , тут 1 каталог (всем известный) System Volume Information.

00001000 : 51 55 51 55 20 20 20 20 20 20 20 08 00 00 00 00 QUQU            
00001010 : 00 00 00 00 00 00 D3 86 7F 50 00 00 00 00 00 00       O?P      
00001020 : 42 20 00 49 00 6E 00 66 00 6F 00 0F 00 72 72 00 B  I n f o   rr 
00001030 : 6D 00 61 00 74 00 69 00 6F 00 00 00 6E 00 00 00 m a t i o   n   
00001040 : 01 53 00 79 00 73 00 74 00 65 00 0F 00 72 6D 00  S y s t e   rm 
00001050 : 20 00 56 00 6F 00 6C 00 75 00 00 00 6D 00 65 00   V o l u   m e 
00001060 : 53 59 53 54 45 4D 7E 31 20 20 20 16 00 BB D2 86 SYSTEM~1    »O?
00001070 : 7F 50 7F 50 00 00 D3 86 7F 50 02 00 00 00 00 00 PP  O?P      
00001080 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 
00001090 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 
000010A0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                 
000010B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Корневой каталог у нас расположен от адреса 0x00001000 до адреса 0x00005000.

Нас интересует смещение 0x1А у первого дескриптора (младшее слово первого кластера файлов) 00 00 . Это и есть номер кластера (а у нас и сектора) , где его искать? , т.е. по адресу 0x00005000. Там каталог как я понимаю.

Файлы для скачивания

LOG formal Flash(512K) to FAT12 form Windows 10-64 [zip]
очень полезная инфа как Wndows при форматировании флэшки на FAT12 работает с секторами (по 512 байт)