【求助】ESP32通过spi外接flash的fat格式与PC不能兼容?
Posted: Fri Aug 06, 2021 10:00 am
求助, 如题, 参照官方demo:ext_flash_fatfs, 外接flash, 问题如下:
1、如果通过esp32格式化flash,读写都正常, 但使用外接设备将flash通过u盘模式连接到windows后, 显示磁盘没有格式化。
2、如果在windows将flash格式化成fat格式后, esp32连接flash就没法挂在, 显示日志如下。 但如果开启格式化参数后, 还是可以重新格式化的。 esp32自动格式化后, 问题同1。
3、如果使用的是苹果系统,将esp32格式化后,在苹果里面能够读取,但写入的数据, 通过esp32读取,能够找到文件, 但读取到的文件内容却是错误的
4、menuconfig中, CONFIG_FATFS_CODEPAGE选项已修改为936,如果用默认的437,那么苹果系统可以看到flash中的文件, 但读取到的内容为空。
1、如果通过esp32格式化flash,读写都正常, 但使用外接设备将flash通过u盘模式连接到windows后, 显示磁盘没有格式化。
2、如果在windows将flash格式化成fat格式后, esp32连接flash就没法挂在, 显示日志如下。 但如果开启格式化参数后, 还是可以重新格式化的。 esp32自动格式化后, 问题同1。
3、如果使用的是苹果系统,将esp32格式化后,在苹果里面能够读取,但写入的数据, 通过esp32读取,能够找到文件, 但读取到的文件内容却是错误的
4、menuconfig中, CONFIG_FATFS_CODEPAGE选项已修改为936,如果用默认的437,那么苹果系统可以看到flash中的文件, 但读取到的内容为空。
Flash型号为华邦的W25Q32, IDF版本为4.1,连接方式与官网demo:ext_flash_fatfs一致,编译环境为mac os
Flash在windows中格式化为fat后,ESP32不能mount的日志如下:
Code: Select all
I (6231) example: Initializing external SPI Flash
I (6231) example: Pin assignments:
I (6231) example: MOSI: 23 MISO: 19 SCLK: 18 CS: 5
D (6235) spi: SPI3 use iomux pins.
V (6238) intr_alloc: esp_intr_alloc_intrstatus (cpu 0): checking args
V (6245) intr_alloc: esp_intr_alloc_intrstatus (cpu 0): Args okay. Resulting flags 0x80E
D (6253) intr_alloc: Connected src 31 to int 13 (cpu 0)
D (6258) FLASH_HAL: extra_dummy: 0
V (6262) memspi: raw_chip_id: 1640EF
V (6266) memspi: chip_id: EF4016
V (6269) memspi: raw_chip_id: 1640EF
V (6273) memspi: chip_id: EF4016
D (6276) spi_flash: trying chip: issi
D (6280) spi_flash: trying chip: gd
D (6284) spi_flash: trying chip: generic
I (6288) spi_flash: detected chip: generic
I (6293) spi_flash: flash io: dio
V (6297) memspi: raw_chip_id: 1640EF
V (6300) memspi: chip_id: EF4016
I (6304) example: Initialized external Flash, size=4096 KB, ID=0xef4016
I (6311) example: Adding external Flash as a partition, label="storage", size=4096 KB
D (6320) partition: Loading the partition table
V (6325) calculated md5: 0x3ffb4828 bf 25 82 2c 0f a6 d8 64 1b d9 30 25 1e 06 b4 c4 |.%.,...d..0%....|
V (6334) stored md5: 0x3f4180d0 bf 25 82 2c 0f a6 d8 64 1b d9 30 25 1e 06 b4 c4 |.%.,...d..0%....|
D (6343) partition: Partition table MD5 verified
I (6348) example: Listing data partitions:
I (6353) example: - partition 'nvs', subtype 2, offset 0x9000, size 16 kB
I (6360) example: - partition 'otadata', subtype 0, offset 0xd000, size 8 kB
I (6368) example: - partition 'phy_init', subtype 1, offset 0xf000, size 4 kB
I (6376) example: - partition 'storage', subtype 129, offset 0x0, size 4096 kB
I (6384) example: Mounting FAT filesystem
V (6388) wl_flash: config start_addr=0x00000000, full_mem_size=0x00400000, page_size=0x00001000, sector_size=0x00001000, updaterate=0x00000010, wr_size=0x00000010, version=0x00000002, temp_buff_size=0x00000020
D (6407) wl_flash: config - config result: state_size=0x00005000, cfg_size=0x00001000, addr_cfg=0x003ff000, addr_state1=0x003f5000, addr_state2=0x003fa000, flash_size=0x003f4000
D (6423) wl_flash: init - config ID=2, stored ID=2, access_count=0, block_size=4096, max_count=16, pos=0, move_count=0x00000000
D (6434) wl_flash: init starts: crc1= 0x86e1885b, crc2 = 0x86e1885b, this->state.crc= 0x86e1885b, state_copy->crc= 0x86e1885b, version=2, read_version=2
D (6448) wl_flash: init: crc1=0x86e1885b, crc2 = 0x86e1885b, result= 0x00000000
V (6456) wl_flash: recoverPos start
V (6459) wl_flash: recoverPos - check pos: result=0x00000000, position= 0, pos_bits= 0x00000000
D (6468) wl_flash: recoverPos - this->state.pos= 0x00000000, position= 0x00000000, result= 0x00000000, max_pos= 0x000003f5
V (6479) wl_flash: recoverPos done
D (6482) wl_flash: init - move_count= 0x00000000
D (6487) vfs_fat_spiflash: using pdrv=0
V (6491) ff_diskio_spiflash: ff_wl_ioctl: cmd=2
V (6496) ff_diskio_spiflash: ff_wl_read - pdrv=0, sector=0, count=1
D (6502) wl_flash: read - src_addr= 0x00000000, size= 0x00001000
V (6508) wl_flash: calcAddr - addr= 0x00000000 -> result= 0x00001000, dummy_addr= 0x00000000
W (6518) vfs_fat_spiflash: f_mount failed (13)
E (6522) example: Failed to mount FATFS (ESP_FAIL)