реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> stm32f373 + flash(at25df081) + fatFs
hd44780
сообщение Mar 3 2016, 13:39
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Ну надо смотреть, что именно не нравится create_chain ..
Хз. На SD-картах и USB флэшках я такого не видел.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
vasilijvs
сообщение Mar 3 2016, 16:40
Сообщение #17





Группа: Участник
Сообщений: 13
Регистрация: 17-02-16
Пользователь №: 90 493



Цитата(hd44780 @ Mar 3 2016, 16:39) *
Ну надо смотреть, что именно не нравится create_chain ..
Хз. На SD-картах и USB флэшках я такого не видел.

Вылетает в первом return 0, после того как в цикле побегает.
Код
ncl = scl;                /* Start cluster */
    for (;;) {
        ncl++;                            /* Next cluster */
        if (ncl >= fs->n_fatent) {        /* Wrap around */
            ncl = 2;
            if (ncl > scl) return 0;    /* No free cluster */
        }
        cs = get_fat(fs, ncl);            /* Get the cluster status */
        if (cs == 0) break;                /* Found a free cluster */
        if (cs == 0xFFFFFFFF || cs == 1)/* An error occurred */
            return cs;
        if (ncl == scl) return 0;        /* No free cluster */
    }
Go to the top of the page
 
+Quote Post
hd44780
сообщение Mar 3 2016, 17:24
Сообщение #18


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Поглядел Ваш код diskio.c (работа отпустила rolleyes.gif )

flash.readArray(realSector, count * 512, buff);
flash.writeData(realSector + i * 256, sizeof(temp), temp);

1-й аргумент функций - что это?
Выше Вы писали, что тестировали прослойку. Вы тестировали функции diskio.c?


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
vasilijvs
сообщение Mar 3 2016, 17:46
Сообщение #19





Группа: Участник
Сообщений: 13
Регистрация: 17-02-16
Пользователь №: 90 493



Цитата(hd44780 @ Mar 3 2016, 20:24) *
Поглядел Ваш код diskio.c (работа отпустила rolleyes.gif )

flash.readArray(realSector, count * 512, buff);
flash.writeData(realSector + i * 256, sizeof(temp), temp);

1-й аргумент функций - что это?
Выше Вы писали, что тестировали прослойку. Вы тестировали функции diskio.c?

Да, их тестировал disk_read(),disk_write()
Это адрес начальный, откуда читать/писать
Go to the top of the page
 
+Quote Post
romas2010
сообщение Mar 3 2016, 18:23
Сообщение #20


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 25-11-11
Пользователь №: 68 515



Цитата(vasilijvs @ Feb 17 2016, 17:15) *
Добрый день, прошу помочь всех знатоков.
........
fResult = f_mount(&fatFs, "0", 1)


ну как я вот подошел к этому
1) в Яндексе набираем "FAT32 MBR" "FAT32 boot record" "FAt32 описание"...изучаем структуры boot record, partition table и собственно самой FAT
2) форматируем в Windows флэшку,скачиваем программу посекторного чтения http://electronix.ru/forum/index.php?act=a...st&id=97074 (пост http://electronix.ru/forum/index.php?showt...1337) копируем на флэшку файлы,смотрим программой что куда записалось,анализируем цепочку FAT,в общем исследуем,что делает Windows с флэшкой
3) Пишем низкоуровневый драйвер,публикующий функции посекторного чтения-записи,читаем даташиты на микросхемы памяти,sd-card и прочее..кстати для эмуляции можно использовать ОЗУ микроконтроллера,сектора там организовать
4) ну и далее пристегиваем товарища Чэна(или Чана) ,если не удалось или лень,пишем свое детище на основе нюансов,изученных в п.2...так же поймете,как форматировать на любой размер

Сложного ничего нет,надо просто включить мозг..

Сообщение отредактировал romas2010 - Mar 3 2016, 18:27
Go to the top of the page
 
+Quote Post
vasilijvs
сообщение Mar 3 2016, 20:41
Сообщение #21





Группа: Участник
Сообщений: 13
Регистрация: 17-02-16
Пользователь №: 90 493



Цитата(romas2010 @ Mar 3 2016, 21:23) *
ну как я вот подошел к этому
1) в Яндексе набираем "FAT32 MBR" "FAT32 boot record" "FAt32 описание"...изучаем структуры boot record, partition table и собственно самой FAT
2) форматируем в Windows флэшку,скачиваем программу посекторного чтения http://electronix.ru/forum/index.php?act=a...st&id=97074 (пост http://electronix.ru/forum/index.php?showt...1337) копируем на флэшку файлы,смотрим программой что куда записалось,анализируем цепочку FAT,в общем исследуем,что делает Windows с флэшкой
3) Пишем низкоуровневый драйвер,публикующий функции посекторного чтения-записи,читаем даташиты на микросхемы памяти,sd-card и прочее..кстати для эмуляции можно использовать ОЗУ микроконтроллера,сектора там организовать
4) ну и далее пристегиваем товарища Чэна(или Чана) ,если не удалось или лень,пишем свое детище на основе нюансов,изученных в п.2...так же поймете,как форматировать на любой размер

Сложного ничего нет,надо просто включить мозг..

Да в том и дело, что всё уже проанализировал.
Читается/пишется всё как надо.
С f_mount вопрос решился, файл создается,а вот данные туда записать не получается

Сообщение отредактировал vasilijvs - Mar 3 2016, 20:42
Go to the top of the page
 
+Quote Post
skripach
сообщение Mar 3 2016, 23:04
Сообщение #22


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



Цитата(vasilijvs @ Mar 3 2016, 23:41) *
,а вот данные туда записать не получается

Вангую, запись блока затирает лишнее помимо того что нужно записать.


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
vasilijvs
сообщение Mar 4 2016, 08:11
Сообщение #23





Группа: Участник
Сообщений: 13
Регистрация: 17-02-16
Пользователь №: 90 493



Цитата(skripach @ Mar 4 2016, 02:04) *
Вангую, запись блока затирает лишнее помимо того что нужно записать.


Вот как все происходит.
Чтение 3584 байт, которые после нужных нам 512.
Стирание 4096.
Запись оставшихся 3584 с начального адреса + 512.
Код
void Flash::eraseBlock512(uint32_t address)
{
    uint8_t source[7 * 512];
    readArray(address + 512, sizeof(source), source);
    eraseBlock(address, Block4k);
    uint8_t temp[256];
    for(int i = 0; i < 14; ++i)
    {
        for(int j = 0; j < sizeof(temp); ++j)
        {
            temp[j] = source[i * 256 + j];
        }
        writeData(address + 512 + i * 256, sizeof(temp), temp);
    }
}
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 4 2016, 12:21
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(vasilijvs @ Mar 4 2016, 11:11) *
Чтение 3584 байт, которые после нужных нам 512.

А почему после, если 512 байт могут быть в середине блока 4k?
Go to the top of the page
 
+Quote Post
vasilijvs
сообщение Mar 4 2016, 12:32
Сообщение #25





Группа: Участник
Сообщений: 13
Регистрация: 17-02-16
Пользователь №: 90 493



Цитата(aaarrr @ Mar 4 2016, 15:21) *
А почему после, если 512 байт могут быть в середине блока 4k?

Потому что указывается адрес стираемого блока, значит они начальные 512.
А то что после,перезаписывается.

Сообщение отредактировал vasilijvs - Mar 4 2016, 12:34
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 4 2016, 12:44
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Нельзя просто взять и назначить начало блока 4k с какого попало адреса. Он должен быть выравнен по границе 4k.
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Mar 9 2016, 11:05
Сообщение #27


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Влезу с рекламой-не-в-тему.
Есть такая замечательная штука, как 010 editor. Позволяет быстро накидать шаблоны структур, а потом разобрать большой бинарный файл в соответствии с этими структурами.
Как использовать в данном случае:
- читаем спецификацию на FAT
- читаем хелп от этого редактора, пишем соответствующие шаблоны (впрочем, для FAT16 уже есть в комплекте)
- пишем для контроллера функцию, которая позволит сохранить дамп памяти этой датафлеш.
- сидим и смотрим структуру дампа, получается очень наглядно.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
vasilijvs
сообщение Mar 10 2016, 14:15
Сообщение #28





Группа: Участник
Сообщений: 13
Регистрация: 17-02-16
Пользователь №: 90 493



Цитата(aaarrr @ Mar 4 2016, 15:44) *
Нельзя просто взять и назначить начало блока 4k с какого попало адреса. Он должен быть выравнен по границе 4k.

Спасибо большое!
Всё заработало.
Действительно проблема была в выравнивании границ стирания.
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 21:20
Рейтинг@Mail.ru


Страница сгенерированна за 0.0145 секунд с 7
ELECTRONIX ©2004-2016