Just in case, for those who may be in search of this issue and come across
this thread, this was fixed in:
https://github.com/apache/incubator-nuttx/pull/4872 (stm32f7:sdmmc defer
invalidate until after DMA completion)

сб, 19 сент. 2020 г. в 13:28, Bob Feretich <bob.feret...@rafresearch.com>:

> By the way, the signature of this problem is corruption of either the
> first or last 16 bytes of a 512-byte sector.
> The M7 cache line size is 32 bytes. The standard Nuttx malloc uses a
> 16-byte alignment. Losing 16-bytes of a FAT table or directory  will cause
> all sorts of strange things to occur.
>
> Regards,
> Bob
>
> On 9/18/2020 8:54 AM, Bob Feretich wrote:
>
> Just a thought....
> On M7 devices, the DMA buffers need to be cache line aligned. Nuttx has
> special malloc functions configurable for FAT buffers.
>
> Also, I'm  not sure the cache invalidate code was tested well for
> store-into cache mode. Store-through was known to be working.
>
> -Bob
>
> On Fri, Sep 18, 2020, 3:11 AM Oleg Evseev <ev.m...@gmail.com> wrote:
>
>> I've debugged this issue and found out that in such moments fs_buffer is
>> not filled fully - if I read the same cluster from pc - fat chain is ok.
>>
>> Moreover I found that after a few steps in debug fs_buffer gets fully
>> filled as it is on an sd card. So it looks like the issue is related to
>> hardware read using dma (CONFIG_STM32F7_DMACAPABLE=y,
>> CONFIG_STM32F7_SDMMC_DMA=y).
>> MCU is stm32f767
>>
>> It doesn't happen every time, but quite rare. Any thoughts where should I
>> look further?
>>
>> пн, 7 сент. 2020 г. в 10:49, Oleg Evseev <ev.m...@gmail.com>:
>>
>>> Hi all,
>>>
>>> I'm working with stm32f7 custom board and px4 firmware, but my concerns
>>> are with the NuttX FAT32 driver. I have an issue. PX4 logger module writes
>>> high rate data to SD card successfully awhile, until at some point write
>>> func return error 28 (“No space left on device”) while there is a lot of
>>> free space on a card (29GB out of 30GB).
>>>
>>> I had this error several times on two different SD-cards. I don't do a
>>> lot of tests, but it seems that SanDisk Extreme Pro is less prone - it can
>>> write 100+ Mbytes files without errors, while SanDisk Extreme usually
>>> breaks a little earlier.
>>> The board is on the table, no vibrations (at least any significant).
>>>
>>> I dig a little and can see that 'fat_write' try to extend the current
>>> cluster by one calling 'fat_extendchain' func that on existing chain
>>> extending verifies that this is a valid cluster by examining its start
>>> sector, but 'startsector = fat_getcluster(fs, cluster);' returns 0:
>>>
>>>      else if (startsector < 2)
>>>         {
>>>           /* Oops.. this cluster does not exist. */
>>>           return 0;
>>>         }
>>>
>>> In 'fs_buffer' there is indeed 0 for this fatindex (see picture).
>>> [image: изображение.png]
>>>
>>>
>>> I didn't dig much in the driver and fat32 itself. What should I check,
>>> where it is useful to set breakpoints, etc.?
>>>
>>> Can any hardware issues be the reason for such error theoretically?
>>> Can any previous power shutdown and unfinished writings (in fact
>>> shutdowns can be on every launch and I already have several corrupted
>>> files), breaks FAT system itself in that way it can lead to this exact
>>> error for new sessions?
>>>
>>> Thanks in advance for any help!
>>>
>>> ---
>>> With regards, Oleg.
>>>
>>
>

Reply via email to