STM32F103C8T6 FAT12 рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рдХреЗ рд░реВрдк рдореЗрдВ

рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЕрдХреНрд╕рд░ рдХрд╛рдо рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдмрд╛рд╣рд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдЙрдиреНрд╣реЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдФрд░ рднреА рдмреЗрд╣рддрд░ рд╣реИред

рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЖрдо рдПрд╕рдЯреАрдПрдо F103 рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рднрдВрдбрд╛рд░рдг рдХреЗ рд╡рд┐рдХрд▓реНрдк рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдкреНрд░рд╕рд┐рджреНрдз рдмреНрд▓реВ рдкрд┐рд▓ рдмреНрд░реЗрдбрдмреЛрд░реНрдб рдиреЗ рднреА рдкреНрд░рдЪрд▓рди рдореЗрдВ рдпреЛрдЧрджрд╛рди рджрд┐рдпрд╛ред

рдЫрд╡рд┐
рдЗрд╕рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдлреНрд▓реИрд╢ рди рдХреЗрд╡рд▓ рдЖрдВрддрд░рд┐рдХ рдлреНрд▓реИрд╢ рдореЗрдВ FAT12 рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╕реНрдЯреЛрд░ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рдлрд░реНрдорд╡реЗрдпрд░ рдЕрдкрдбреЗрдЯ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд╣реИред

рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░, STM32F103C8T6 рдореЗрдВ 64K рдлреНрд▓реИрд╢ рдореЗрдореЛрд░реА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд▓рдЧрднрдЧ рд╕рднреА STM32F103C8T6 рдореЗрдВ, 128K рд╕реНрдерд╛рдкрд┐рдд рд╣реИред рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рд╕реНрд░реЛрддреЛрдВ рдореЗрдВ рднреА рд╡рд░реНрдгрд┐рдд рд╣реИ - рд╡реЗ рдЖрдорддреМрд░ рдкрд░ 64K рдЕрдзрд┐рдХ рдбрд╛рд▓рддреЗ рд╣реИрдВред рдпрд╣ "рд╕реБрд╡рд┐рдзрд╛" рдЖрдкрдХреЛ 128K - 20K рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рд╕рд┐рд╕реНрдЯрдо рдХреЛ FAT12 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ) - рдлрд░реНрдорд╡реЗрдпрд░ рдХрд╛ рдЖрдХрд╛рд░ред

рдЗрд╕ рдбреНрд░рд╛рдЗрд╡ рдХреЛ рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рдЙрддреНрд╕рд╛рд╣реА рд▓реЛрдЧреЛрдВ рдХреЛ FAT12 рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЛрдб рдореЗрдВ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдирд┐рдХрд╛рд▓реА рдЧрдИ рдбрд┐рд╕реНрдХ рдЫрд╡рд┐ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ / рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд▓реЗрдХрд┐рди рдЬрдм рдПрдХ рдлрд╝рд╛рдЗрд▓ рдбреНрд░рд╛рдЗрд╡ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╢реБрд░реВ рд╣реБрдИрдВред

рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╕реЗрдХреНрдЯрд░ (рдмреНрд▓реЙрдХ) рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рдПрдХ рдЕрд▓рдЧ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рд╣реЛрддреА рд╣реИред рдЬрдм рдПрдХ рдбрд┐рд╕реНрдХ рдЫрд╡рд┐ рд▓реЛрдб рд╣реЛрддреА рд╣реИ, рддреЛ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд╣реЛрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

-рд╕рдВрд░рдЪрдирд╛ рдмреНрд▓реЙрдХ рдирдВрдмрд░ 1,
-рд╕рдВрд░рдЪрдирд╛ рдмреНрд▓реЙрдХ рдирдВрдмрд░ 2,
-рдХреЙрд░реНрдб рдмреНрд▓реЙрдХ рдирдВрдмрд░ 3ред

FAT12 рдбреЗрдЯрд╛ рд▓рд┐рдЦрддреЗ рд╕рдордп, рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рд╣реЛ рд╕рдХрддреА рд╣реИ:

-рдХреЙрд░реНрдб рдмреНрд▓реЙрдХ рдирдВрдмрд░ 3,
-рд╕рдВрд░рдЪрдирд╛ рдмреНрд▓реЙрдХ рдирдВрдмрд░ 1,
-рдХреЙрд░реНрдб рдмреНрд▓реЙрдХ рдирдВрдмрд░ 2ред

рдФрд░, рдЪреВрдВрдХрд┐ рдлреНрд▓реИрд╢ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реЗ 1K рдкреГрд╖реНрда рдХреЛ рдорд┐рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрдм рдбреНрд░рд╛рдЗрд╡ рдореЗрдВ 512 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╕реЗрдХреНрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдФрд░ рдЖрдк рдЕрдиреНрдп рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ), рдпрджрд┐ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкрд╣реБрдВрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкрдбрд╝реЛрд╕реА рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рдЯрд╛ рджреА рдЬрд╛рддреА рд╣реИред рдРрд╕рд╛ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдкрдбрд╝реЛрд╕реА рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 512 рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдФрд░ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:

- рдкреГрд╖реНрда рдХреА рд╢реБрд░реБрдЖрдд рдХрд╛ рдкрддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ,
- рдкрдбрд╝реЛрд╕реА рдХреНрд╖реЗрддреНрд░ рдХреЛ рдпрд╛рдж рд░рдЦреЗрдВ,
- рдкреГрд╖реНрда рдорд┐рдЯрд╛рдПрдВ,
- рдПрдХ рдпрд╛рджрдЧрд╛рд░ рдХреНрд╖реЗрддреНрд░ рд▓рд┐рдЦреЗрдВ,
- рдбреЗрдЯрд╛ рд▓рд┐рдЦреЗрдВред

рдЖрд╡рд╢реНрдпрдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рд▓реЛрд╣реЗ рдХреЗ рдЬрдВрдЧрд▓ рдореЗрдВ рддрд▓реНрд▓реАрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдХреНрдпреВрдмрдПрдХреНрд╕рдПрдХреНрд╕ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рддреИрдпрд╛рд░ рдХреАред

рдореИрдВ HAL (usbd_storage_if.c) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлреНрд▓реИрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛

//    flash void writeBuf (uint32_t page_addr, uint8_t *buf){ uint32_t erase_addr=get_erase_addr(page_addr); uint32_t buf_erase_addr; uint32_t buf32; if (page_addr != erase_addr) { buf_erase_addr=erase_addr; } else { buf_erase_addr=erase_addr+STORAGE_BLK_SIZ; } HAL_FLASH_Unlock(); //      set_buf_before_erase(buf_erase_addr); //       FLASH_EraseInitTypeDef EraseInitStruct; uint32_t PAGEError = 0; EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES; EraseInitStruct.PageAddress = erase_addr; EraseInitStruct.NbPages = 1; HAL_FLASHEx_Erase(&EraseInitStruct,&PAGEError); //    for (int i=0; i<STORAGE_BLK_SIZ/4;i++) { HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,buf_erase_addr,blk_buff[i]); buf_erase_addr+=4; } //   for (int i=0; i<STORAGE_BLK_SIZ/4;i++) { buf32=*(uint32_t *)&buf[i*4]; HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, page_addr,buf32); page_addr+=4; } HAL_FLASH_Lock(); } 

рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░ рдореБрдЭреЗ рд▓рдЧрднрдЧ 20K рдорд┐рд▓рд╛, рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рдбреЗрдЯрд╛ рдореЗрдореЛрд░реА рдкреЗрдЬ рдХреЛ 0x08006000 (24K) рдХреЗ рд╕рд╛рде рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╣рдо рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдВ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред

рд╣рдо рдХрдиреЗрдХреНрдЯ:

 [ 8193.499792] sd 4:0:0:0: Attached scsi generic sg2 type 0 [ 8193.502050] sd 4:0:0:0: [sdb] 128 512-byte logical blocks: (65.5 kB/64.0 KiB) [ 8193.502719] sd 4:0:0:0: [sdb] Write Protect is off [ 8193.502722] sd 4:0:0:0: [sdb] Mode Sense: 00 00 00 00 [ 8193.503439] sd 4:0:0:0: [sdb] Asking for cache data failed [ 8193.503445] sd 4:0:0:0: [sdb] Assuming drive cache: write through [ 8193.523812] sdb: [ 8193.526914] sd 4:0:0:0: [sdb] Attached SCSI removable disk 

рдбрд┐рд╕реНрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИ, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ!

рдЖрдЗрдП рд╡рд┐рднрд╛рдЬрди рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рд╣рдорд╛рд░реА рдбрд┐рд╕реНрдХ рдХреЛ рд╕реНрд╡рд░реВрдкрд┐рдд рдХрд░реЗрдВред

рд▓рд┐рдирдХреНрд╕ рдкрд░, рдпрд╣ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ:

 sudo fdisk /dev/sdb 



FAT12 рдореЗрдВ рдкреНрд░рд╛рд░реВрдк:

 sudo mkfs.fat /dev/sdb -F 12 

рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБ:



рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрд┐рд╕реА рдХреЛ рдпрд╣ рдирд╣реАрдВ рднреВрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдлреНрд▓реИрд╢ рдХреА рд╕рдВрдЦреНрдпрд╛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреА рд╣реИ
рдХреЗрд╡рд▓ 100,000 рдХреЗ рднреАрддрд░ рдЧрд╛рд░рдВрдЯреАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдПрдХрд▓ 30K рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реНрд╡рд░реВрдкрд┐рдд рдФрд░ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ (рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдбреАрдмрдЧ рд▓реЙрдЧ рдХреЗ рдЕрдиреБрд╕рд╛рд░):

 00106 44 67 Write_FS blk_addr=003 0x08006600 

106 рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ред

рд╕рд╡рд╛рд▓ рдмрдирд╛ рд╣реБрдЖ рд╣реИ - FAT12 рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реАрдзреЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдХреЗ рдореИрдВ рдбреЗрдЯрд╛ рдХреИрд╕реЗ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реВрдВ?
рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

Source: https://habr.com/ru/post/hi441660/


All Articles