|
|
  |
stm32f4 + Chan's FatFS, работа с большими SD картами |
|
|
|
Aug 31 2018, 10:04
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
QUOTE (AlanDrakes @ Aug 31 2018, 16:55)  Переводим. Мне перевод не нужен, читаю английский без перевода Но вопрос мой был немного в другом. Я знаю, как работает CMD25. Меня интересует: есть ли железобетонная гарантия, что файловая система от Чана при мультисекторной записе (передавая sector_count > 1) выдаст сектора "без дырок". Например, она пишет сектора 10, 11, 12 - это без дырок. Их сразу можно писать на карту. А вот с дырками, но тоже несколько секторов: 10, 20, 12. Есть дырка. Я к чему задаю вопрос: может быть ФС требует записи нескольких секторов, лежащих не линейно, в надежде, что низкоуровневый драйвер сам разгребёт это? Например через кольцевой буфер? Я думаю, что Чан всё делает правильно, т.е. даёт сектора последовательно, пригодные для записи на носитель. Но всё же, а вдруг?
--------------------
Выбор.
|
|
|
|
|
Sep 3 2018, 16:27
|

Частый гость
 
Группа: Участник
Сообщений: 101
Регистрация: 2-05-15
Из: Россия, Омск
Пользователь №: 86 474

|
Помнится мне, что вся работа с секторами происходит в файле ff.c, а работа с низкоуровнемыми командами записи - в diskio.c, где уже Вы, по желанию, можете делать запись мультисекторно, или посекторно.
При наличии больших буферов ФС - драйвер технически может вызывать функцию disk_write с параметром "Количество секторов", отличным от единицы. Фактически, единственный такой вызов я нашёл в функции f_write() в том случае, если ЕСТЬ свободные сектора, куда это поместится, и размер данных больше чем на один сектор.
Так что, весь разбор что и куда писать, находится выше. Драйверу же карты передаются только команды "Пиши вот это, вот сюда, в таком-то количестве".
|
|
|
|
|
Sep 3 2018, 19:31
|

Профессионал
    
Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634

|
Цитата "Пиши вот это, вот сюда, в таком-то количестве". Пиши вот это, вот сюда, в таком-то количестве, подряд с указанного места. Я пользуюсь - работяет. Кстати, очень понравилось extFAT, там как раз нужно 64 битное смещение в seek
Сообщение отредактировал Genadi Zawidowski - Sep 3 2018, 19:32
|
|
|
|
|
Sep 4 2018, 05:34
|

Частый гость
 
Группа: Участник
Сообщений: 101
Регистрация: 2-05-15
Из: Россия, Омск
Пользователь №: 86 474

|
Пилил я как-то свой тест скорости карточек. Не оптимальный до ужаса. Тем не менее, результат был таким: Код File created. Write test... [0000000030.080] File write done. Total bytes written: 5242880 bytes. Time: 27684 ms. Avg: ~189 kBps Read test... [0000000036.114] File read done. Total bytes read: 5242880 bytes. Time: 6033 ms. Avg: ~869 kBps Здесь кристалл работал на ~96МГц, возможно, меньше. SDIO тактировалось от PLL на 48МГц. Если тактирование SDIO было быстрее тактирования ядра - работать с картой памяти было невозможно. Были у меня ещё какие-то весёлые проблемы с записью больших блоков через FatFS, хотя библиотека собиралась с неправильными параметрами, и объём памяти под неё старательно ужимался. В итоге, при записи огромных буферов из памяти (как раз размером в несколько секторов) получал странные зависания в случайных местах. В причинах не разобрался, добавив костыль, заставив код писать мелкими блоками.
|
|
|
|
|
Sep 6 2018, 17:05
|

бессмертным стать можно тремя способами
    
Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912

|
Цитата(jcxz @ Sep 6 2018, 07:52)  Вы не поверите, но и на приём - тоже можно!  SDIO мало где реально нужно в embedded области. SDIO может эмбеддедуу и ненужен, он нужен заказчику который мне этот эмбеддед заказал! нужно писать телеметрию изделия, а потом когда что то пекосо....лось в нутри оного изделия и оно со звуком ящика с гвоздямт стукнолось об землю - обосновано назначать виновптого как я говорил, теперь попробую eMMC микросхемку запустить вместо сокет+карта. так выглядеть поприличнее будет, как мне кажется. у меня все заработало, но есть один вопрос - я в своем драйвере при выполнении обмена смотрю один блок или более одного нужно протолкнуть, если один то подаю команду одиночного обмена, иначе мультиблочного. пробывал мультиблочным один блок проталкивать - работает, при мультиблочном обмене по завершении необходимо подать команду терминирования обмена, в одноблочном этого не нужно. пробывал в мультиблочном эту команду не подавать, тоже работает. номера команд на память не помню, сорри.Почему оно одинаково работает, и зачем тогда два отдельных отдельных метода?
|
|
|
|
|
Sep 7 2018, 04:40
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(klen @ Sep 6 2018, 20:05)  SDIO может эмбеддедуу и ненужен, он нужен заказчику который мне этот эмбеддед заказал! У Вас как-то видимо неправильно составлено ТЗ. Заказчик должен заказывать функционал, а не способы его реализации. А уж способы реализации должен выбирать инженер исходя из требований ТЗ и здравого смысла. И как подключено некое ЗУ или его тип, объём - это однозначно должен определять инженер, а не заказчик. Заказчик в ТЗ должен только указать: необходима фиксация данных телеметрии в энергонезависимой памяти в течение не менее чем такого-то времени и такие-то и такие-то параметры (как то так). А уж как это делать и куда сохранять - забота инженера (программиста). Цитата(klen @ Sep 6 2018, 20:05)  нужно писать телеметрию изделия, а потом когда что то пекосо....лось в нутри оного изделия и оно со звуком ящика с гвоздямт стукнолось об землю - обосновано назначать виновптого Вполне нормально писали текущую телеметрию во FRAM+FLASH по SPI без каких-то проблем. А писать это дело в FatFS, внутренние операции которой Вы не контролируете - это стрелять себе в ногу. Или заказчику, который не умеет грамотно составить ТЗ. И разработчик занимается натягиванием FatFS, вместо обеспечения хранения потока телеметрии, устойчивого к авариям питания (без всяких FS).
|
|
|
|
|
Sep 7 2018, 16:44
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(Arlleex @ Sep 7 2018, 17:15)  Они феном паялись А о каком "фирмварь" идет речь? Как-то читал атмеловский даташит по пайке, так там очень не советовали паять в печи запрограммированные МК по причине того, что может произойти искажение в флеш-памяти программы. Тут как-раз такой случай, в каждой карточке есть МК с программой, которая, как правило, находится в первых секторах нанда, и разметка бэд-блоков и пр. тоже там, она и может испортится, по крайне мере на 1 смартбае такое было, после пайки карта работала нестабильно и через непродолжительное время ушла в "рид-онли"... Конечно есть другое дело - е-ммс - там должно быть предусмотрена печная пайка, но х.з. может там и техпроцесс какой-то другой...
|
|
|
|
|
Sep 8 2018, 04:02
|
Местный
  
Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188

|
Цитата(jcxz @ Sep 7 2018, 07:40)  ...Заказчик должен заказывать функционал, а не способы его реализации. А уж способы реализации должен выбирать инженер исходя из требований ТЗ и здравого смысла... В общем случае Вы безусловно правы. Но при наличии повышенных требований к защите информации, Заказчик может позволить себе не заморачиваться формулированием их (требований) в весьма мудреных терминах отрасли, а потребовать использования уважаемых им (Заказчиком) протоколов.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|