|
stm32f4 + Chan's FatFS, работа с большими SD картами |
|
|
|
 |
Ответов
|
Sep 10 2018, 00:00
|

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

|
QUOTE (jcxz @ Sep 6 2018, 12:52)  Вы не поверите, но и на приём - тоже можно!  Поверю! QUOTE (jcxz @ Sep 6 2018, 12:52)  SDIO мало где реально нужно в embedded области. Как я понимаю, SDIO даёт более высокую скорость, ведь SPI это только 25 МГц максимум + полупрограммные издержки. Мне пришлось делать на SPI, т.к. дали такое железо. Если бы я имел право выбирать, то настоял бы на SDIO, т.к. придерживаюсь принципа: аппаратный блок справится с задачей лучше, чем софтварная реализация. Хотя, есть исключения.
--------------------
Выбор.
|
|
|
|
|
Sep 10 2018, 07:56
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(haker_fox @ Sep 10 2018, 03:00)  Как я понимаю, SDIO даёт более высокую скорость, ведь SPI это только 25 МГц максимум + полупрограммные издержки. О каких издержках речь? 25МГц - это всего-лишь SCLK. При этом получается скорость передачи около 1МБ/сек. Можете привести пример в каких именно embedded-задачах (на МК из заголовка темы) дальнейшее увеличение скорости передачи выше означенного 1МБ/сек приведёт к заметному увеличению скорости работы прикладной задачи с картой? Не тест скорости, не высосанную из пальца задачу - сферического коня в вакууме, а реальную задачу? Скажем: чтение конфига-файла и старт устройства по SPI выполнялся за 2 секунды, а та же задача, но по SDIO - 1 секунда? Могу Вас разочаровать, но при таких скоростях обмена, значительную величину начинает занимать остальная обработка (не собственно задержка связанная с передачей) и низкоуровневого драйвера SD и всего что выше него. Тем более там ещё FatFS болтается. И увеличение в скорости передачи карты даст выигрыш общей производительности прикладной задачи всего несколько % в большинстве embedded-задач. Если уж есть нужда в увеличении скорости обмена с картой, то первым делом нужно от FS избавляться. Цитата(haker_fox @ Sep 10 2018, 03:00)  Мне пришлось делать на SPI, т.к. дали такое железо. Если бы я имел право выбирать, то настоял бы на SDIO, т.к. придерживаюсь принципа: аппаратный блок справится с задачей лучше, чем софтварная реализация. Так SPI-контроллеры обычно тоже в МК аппаратные, не надо ногодрыгать. Да и правильно что Вам дали, так как "аппаратный блок справится с задачей лучше" - не аргумент. Не блок справляется с задачей, а программист. А при выборе способа решения исходят из того сколько то или иное решение займёт ресурсов (времени МК, количества ног или интерфейсов). И какие из этих ресурсов наиболее важные/дефицитные в данной задаче. А какой-то блок там справится или нет - не аргумент, не справиться может только программист.
|
|
|
|
|
Sep 10 2018, 10:08
|

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

|
QUOTE (jcxz @ Sep 10 2018, 15:56)  О каких издержках речь? Да хотябы циклически ждать (до 64 циклов SCLK) отклик от карты (R0, R1...). Это же надо отправлять по шине 0xff, читать данные, и проверять MSB. По любому нужно либо прерывание каждый принятый байт дёргать (и там проверять), либо в основном цикле. Я не знаю иного способа. Считаю, что это издержки. QUOTE (jcxz @ Sep 10 2018, 15:56)  Можете привести пример в каких именно embedded-задачах (на МК из заголовка темы) дальнейшее увеличение скорости передачи выше означенного 1МБ/сек приведёт к заметному увеличению скорости работы прикладной задачи с картой? Не тест скорости, не высосанную из пальца задачу - сферического коня в вакууме, а реальную задачу? К сожалению, нет. Всё вышесказанное является лишь моим мнением. QUOTE (jcxz @ Sep 10 2018, 15:56)  Так SPI-контроллеры обычно тоже в МК аппаратные, не надо ногодрыгать. Да, но SPI, на мой взгляд, является "побочным" интерфейсом для SD-карты, идущим из далёкого прошлого. Поэтому, если есть SDIO в МК, его лучше использовать. QUOTE (jcxz @ Sep 10 2018, 15:56)  Да и правильно что Вам дали Ну дали не потому, что это правильно. А банально не осталось свободных пинов у МК. Вот на SPI и навесили "остатки". А мне потом ещё пришлось доводить систему на макетке - добавить буфер (т.к. внутреннюю шину просто вывели на улицу, что вносило сбой в работу при установке карты, а также давало возможность подпитывать её паразитным питанием) и сделать некоторые другие доработки. QUOTE (jcxz @ Sep 10 2018, 15:56)  А какой-то блок там справится или нет - не аргумент, не справиться может только программист.  Ну как посмотреть. Где-то на форуме уважаемый Rst7 лет 10 назад приводил код, который отправляет, и (не очень стабильно) принимает манчестер для 10 Мбит Ethernet. Для этого использовался аппаратный UART. Ну если он справился да ещё и на 8-битной AVR'ке, почему бы в современных "толстых" армах не использовать подобное решение. Не везде ведь нужно 100 или более Мбит. А UART'ов даже в маленьком МК Cortex-M0 как правило не менее двух. И если будет работать неправильно, то - программист плохой. Не смог(((
--------------------
Выбор.
|
|
|
|
|
Sep 10 2018, 11:30
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(haker_fox @ Sep 10 2018, 13:08)  Да хотябы циклически ждать (до 64 циклов SCLK) отклик от карты (R0, R1...). Это же надо отправлять по шине 0xff, читать данные, и проверять MSB. По любому нужно либо прерывание каждый принятый байт дёргать (и там проверять), либо в основном цикле. Я не знаю иного способа. Считаю, что это издержки. Не надо. Драйвер естественно должен использовать DMA. По завершению блока DMA анализировать полученные данные с SD и искать там первый не 0xFF. Программно это очень незначительно по времени, так как в цикл-е про-AND-ить 32-битные данные - ерунда. Цитата(haker_fox @ Sep 10 2018, 13:08)  Ну дали не потому, что это правильно. А банально не осталось свободных пинов у МК. Вот на SPI и навесили "остатки". Вот я об этом и говорю: свободные ноги - это как правило очень ценный ресурс в МК и его дефицит был во всех моих проектах. Тем более - на SPI легко можно объединить несколько устройств на одной шине. А с SDIO - придётся пины только под SD отдать. И зачем? А какое-то там "удобство" - это вопрос больше в компетентности программиста - ну будет немного больше строчек кода и всего-то. Цитата(haker_fox @ Sep 10 2018, 13:08)  Ну как посмотреть. Где-то на форуме уважаемый Rst7 лет 10 назад приводил код, который отправляет, и (не очень стабильно) принимает манчестер для 10 Мбит Ethernet. Для этого использовался аппаратный UART. Ну если он справился да ещё и на 8-битной AVR'ке, почему бы в современных "толстых" армах не использовать подобное решение. Не везде ведь нужно 100 или более Мбит. А UART'ов даже в маленьком МК Cortex-M0 как правило не менее двух. И если будет работать неправильно, то - программист плохой. Не смог((( Ну вообще-то - не могу знать о каком Ethernet идёт речь. Есть множество внешних Ethernet-чипов с логикой Ethernet внутри. И если такой Ethernet предполагает подключение по UART - то так и следует подключать. О чём разговор? Мы в каких-то из своих проектов использовали внешний чип Ethernet с подключением по SPI и что? Хотя при этом в МК был аппаратный Ethernet и даже со встроенной физикой. Но по требованиям ТЗ он не походил. Поставили внешний.
|
|
|
|
|
Sep 10 2018, 14:33
|

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

|
QUOTE (jcxz @ Sep 10 2018, 19:30)  Не надо. Драйвер естественно должен использовать DMA. По завершению блока DMA анализировать полученные данные с SD и искать там первый не 0xFF. Программно это очень незначительно по времени, так как в цикл-е про-AND-ить 32-битные данные - ерунда. Т.е. вы предлагаете при ожидании отклика просто вычитать априори 8 байт (64 цикла). Затем, по завершению посылки, найти первый с MSB=0? Я просто не предполагал, что так можно. Я думал, что как только мы встретили первый не 0xff, то следует сразу остановиться, и перевести cs в 1. Гм... если это так, то просто супер!!! QUOTE (jcxz @ Sep 10 2018, 19:30)  А какое-то там "удобство" - это вопрос больше в компетентности программиста - ну будет немного больше строчек кода и всего-то. Пока остаюсь при своём мнении. Ведь время программиста тоже денег стоит. И проект ещё сопровождать надо. И исправлять ошибки. И добавлять функции. А так - бухнул сразу чип, подходящий по периферии, и всё. QUOTE (jcxz @ Sep 10 2018, 19:30)  Ну вообще-то - не могу знать о каком Ethernet идёт речь. Вот, самый первый пост. Буквально несколько первых предложений. Хотя, давно это было. И при более внимательном чтении вспомнил, что у Rst7 всё-таки не получилось полностью реализовать программно-аппаратный PHY. Помню, давным давно, на AVR'ках делали программный USB device, HID. Вот мне тут подумалось, что такое можно сделать в одной из недорогих поделок на STM32F051. Правда я хочу 2 CDC (композит). Но, наверно, ничего не получится. Но пока прицениваюсь. Это как раз тот случай, когда аппаратный модуль просто отсутствует.
--------------------
Выбор.
|
|
|
|
|
Sep 10 2018, 20:23
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(haker_fox @ Sep 10 2018, 17:33)  Т.е. вы предлагаете при ожидании отклика просто вычитать априори 8 байт (64 цикла). Затем, по завершению посылки, найти первый с MSB=0? Я просто не предполагал, что так можно. Я думал, что как только мы встретили первый не 0xff, то следует сразу остановиться, и перевести cs в 1. Гм... если это так, то просто супер!!! Нет. Почитайте спецификацию внимательнее - CLK можно гнать сколько угодно. Мой драйвер так и работал. Только не помню - 64 или больше, пока не найдётся !=0xFF. Цитата(haker_fox @ Sep 10 2018, 17:33)  Пока остаюсь при своём мнении. Ведь время программиста тоже денег стоит. И проект ещё сопровождать надо. И исправлять ошибки. И добавлять функции. А так - бухнул сразу чип, подходящий по периферии, и всё. Ну да - это время потом понадобится. Когда ног не хватит и придётся всё переделывать. Да и какая разница по затраченному времени - SPI или SD? Цитата(haker_fox @ Sep 10 2018, 17:33)  Нет, слишком много буков. Не осилю, после тренировки то. Да и вообще - там похоже что-то странное, вычурное, нетипичное использование периферии. Делать такое нужно или при реальной нужде или как хобби. А подключение SD на SPI - это вполне себе штатный способ подключения, прописанный в спецификации. Так что это совсем из другой оперы. Цитата(haker_fox @ Sep 10 2018, 17:33)  Помню, давным давно, на AVR'ках делали программный USB device, HID. Вот мне тут подумалось, что такое можно сделать в одной из недорогих поделок на STM32F051. Читал про такое. Тоже имхо - бессмыслица. Ибо - никакого профита на ARM7 в которых как правило есть USB. Во-вторых - там вроде даже не FullSpeed, а LowSpeed да ещё с какими-то ограничениями и косяками (вроде грузит процессор сильно). Т.е. - опять для практического использования бесполезная вещь. Опять-же - нигде в спецификации USB нет ни слова о реализации через UART. А для SD - SPI есть.
|
|
|
|
|
Sep 10 2018, 23:43
|

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

|
QUOTE (jcxz @ Sep 11 2018, 04:23)  Почитайте спецификацию внимательнее - CLK можно гнать сколько угодно. Вернее не просто CLK, а 0xff передавать на карту?! QUOTE (jcxz @ Sep 11 2018, 04:23)  А для SD - SPI есть.  Я вас понял, из двух разрешённых интерфейсов вы просто предпочитаете использовать тот, который наиболее удобен. QUOTE (Сергей Борщ @ Sep 11 2018, 05:15)  Я мимо проходил, протокола не знаю, просто смотреть последний байт блока недостаточно? Вроде как нет, отклик на команду появляется однократно в течение 8 байт.
--------------------
Выбор.
|
|
|
|
Сообщений в этой теме
klen stm32f4 + Chan's FatFS Aug 1 2018, 20:40 Genadi Zawidowski кэши, выравнивание... Все там работает. Версию пон... Aug 1 2018, 20:52 Integro Поддерживаю, работал с одной из последних версий, ... Aug 2 2018, 08:04 klen спасибо!
вроде заработало.
тестировался на шес... Aug 3 2018, 07:27  Grape Цитата(klen @ Aug 3 2018, 10:27) ...
еще ... Aug 27 2018, 13:19 Genadi Zawidowski Вот мой конфиг, служит хорошо. За FF_USE_FASTSEEK ... Aug 3 2018, 07:36 klen здравcтуйте.
с помощью такой то матери дописал sdi... Aug 26 2018, 15:38  mantech Цитата(klen @ Aug 26 2018, 18:38) ... теп... Aug 27 2018, 08:00   aaarrr Цитата(mantech @ Aug 27 2018, 11:00) А во... Aug 27 2018, 08:25    klen дело в том что платы летают+вибрируют, и иногда с ... Aug 27 2018, 09:06     Arlleex Цитата(klen @ Aug 27 2018, 12:06) я сам н... Aug 27 2018, 12:36      Obam Цитата(Arlleex @ Aug 27 2018, 15:36) Изи ... Aug 27 2018, 15:50       Arlleex Цитата(Obam @ Aug 27 2018, 18:50) Ну, есл... Aug 27 2018, 15:57        mantech Цитата(Arlleex @ Aug 27 2018, 18:57) Да д... Sep 6 2018, 19:10         Arlleex Цитата(mantech @ Sep 6 2018, 22:10) Так-т... Sep 7 2018, 14:15          mantech Цитата(Arlleex @ Sep 7 2018, 17:15) Они ф... Sep 7 2018, 16:44       MrYuran Цитата(Obam @ Aug 27 2018, 18:50) Ну, есл... Aug 31 2018, 12:12 haker_fox Тоже недавно сделал свой драйвер для SD. Правда дл... Aug 31 2018, 01:42 AlanDrakes Гарантия есть. Она в самой команде CMD25, которая ... Aug 31 2018, 08:55 haker_fox QUOTE (AlanDrakes @ Aug 31 2018, 16:55) П... Aug 31 2018, 10:04 AlanDrakes Помнится мне, что вся работа с секторами происходи... Sep 3 2018, 16:27 Genadi Zawidowski Цитата"Пиши вот это, вот сюда, в таком-то кол... Sep 3 2018, 19:31 haker_fox QUOTE (Genadi Zawidowski @ Sep 4 2018, 03... Sep 4 2018, 01:50 AlanDrakes Пилил я как-то свой тест скорости карточек. Не опт... Sep 4 2018, 05:34 haker_fox QUOTE (AlanDrakes @ Sep 4 2018, 13:34) Ес... Sep 5 2018, 14:08  jcxz Цитата(haker_fox @ Sep 5 2018, 17:08) С S... Sep 6 2018, 04:52   klen Цитата(jcxz @ Sep 6 2018, 07:52) Вы не по... Sep 6 2018, 17:05    aaarrr Цитата(klen @ Sep 6 2018, 20:05) Почему о... Sep 6 2018, 18:29    jcxz Цитата(klen @ Sep 6 2018, 20:05) SDIO мож... Sep 7 2018, 04:40     Axel Цитата(jcxz @ Sep 7 2018, 07:40) ...Заказ... Sep 8 2018, 04:02      jcxz Цитата(Axel @ Sep 8 2018, 07:02) В общем ... Sep 8 2018, 11:01 aaarrr Цитата(haker_fox @ Sep 10 2018, 03:00) SP... Sep 10 2018, 00:37  haker_fox QUOTE (aaarrr @ Sep 10 2018, 08:37) 50, h... Sep 10 2018, 01:34   aaarrr Цитата(haker_fox @ Sep 10 2018, 04:34) Мо... Sep 10 2018, 15:13    Сергей Борщ QUOTE (jcxz @ Sep 10 2018, 14:30) Не надо... Sep 10 2018, 21:15     jcxz Цитата(Сергей Борщ @ Sep 11 2018, 00:15) ... Sep 11 2018, 05:23      haker_fox QUOTE (jcxz @ Sep 11 2018, 13:23) Естеств... Sep 11 2018, 06:35       jcxz Цитата(haker_fox @ Sep 11 2018, 09:35) Чт... Sep 11 2018, 06:51 V_N ЦитатаЕдинственный плюс SDIO в сравнении с SPI - б... Sep 11 2018, 07:46 jcxz Цитата(V_N @ Sep 11 2018, 10:46) Вы не пр... Sep 11 2018, 09:10  aaarrr Цитата(jcxz @ Sep 11 2018, 12:10) И сколь... Sep 11 2018, 09:45   jcxz Цитата(aaarrr @ Sep 11 2018, 12:45) На чт... Sep 11 2018, 12:31    aaarrr Цитата(jcxz @ Sep 11 2018, 15:31) И вообщ... Sep 11 2018, 14:06     haker_fox QUOTE (aaarrr @ Sep 11 2018, 22:06) Так и... Sep 11 2018, 14:16     jcxz Цитата(aaarrr @ Sep 11 2018, 17:06) Думае... Sep 11 2018, 15:21      aaarrr Цитата(jcxz @ Sep 11 2018, 18:21) Ага, не... Sep 11 2018, 15:34       jcxz Цитата(aaarrr @ Sep 11 2018, 18:34) Вы, н... Sep 11 2018, 17:37        aaarrr Цитата(jcxz @ Sep 11 2018, 20:37) Может о... Sep 11 2018, 18:44       Aner QUOTE (aaarrr @ Sep 11 2018, 18:34) Внутр... Sep 11 2018, 18:17 haker_fox QUOTE (jcxz @ Sep 11 2018, 14:51) Не особ... Sep 11 2018, 08:16 V_N ЦитатаВот касательно приведённого выше V_N примера... Sep 11 2018, 18:28 jcxz Цитата(V_N @ Sep 11 2018, 21:28) Файл не ... Sep 11 2018, 19:17  aaarrr Цитата(jcxz @ Sep 11 2018, 22:17) И можно... Sep 11 2018, 19:37   jcxz Цитата(aaarrr @ Sep 11 2018, 22:37) Забыл... Sep 11 2018, 19:53    aaarrr Цитата(jcxz @ Sep 11 2018, 22:53) Хммм...... Sep 11 2018, 20:03     jcxz Цитата(aaarrr @ Sep 11 2018, 23:03) Разум... Sep 11 2018, 20:40      aaarrr Цитата(jcxz @ Sep 11 2018, 23:40) А по де... Sep 11 2018, 20:53 haker_fox QUOTE (jcxz @ Sep 12 2018, 03:17) и она в... Sep 12 2018, 00:26 jcxz Цитата(haker_fox @ Sep 12 2018, 03:26) Я ... Sep 12 2018, 05:56  aaarrr Цитата(jcxz @ Sep 12 2018, 08:56) И если ... Sep 12 2018, 08:21   jcxz Цитата(aaarrr @ Sep 12 2018, 11:21) А нич... Sep 12 2018, 08:55    aaarrr Цитата(jcxz @ Sep 12 2018, 11:55) Несколь... Sep 12 2018, 10:33 V_N ЦитатаТогда о чём разговор? Зачем тогда процессор ... Sep 12 2018, 06:13 jcxz Цитата(V_N @ Sep 12 2018, 09:13) Запитанн... Sep 12 2018, 06:35  haker_fox QUOTE (jcxz @ Sep 12 2018, 14:35) И винов... Sep 12 2018, 07:50 Genadi Zawidowski ЦитатаДля особо одаренных пользователей ( карта на... Sep 12 2018, 07:11 V_N ЦитатаЦитатаКак-то странно делать выводы о потребл... Sep 12 2018, 09:24 haker_fox QUOTE (jcxz @ Sep 12 2018, 16:55) Я прост... Sep 12 2018, 09:40 Arlleex Мне все-таки нужна консультация, чем отличается SD... Sep 12 2018, 11:45 haker_fox QUOTE (Arlleex @ Sep 12 2018, 19:45) Если... Sep 12 2018, 12:04 aaarrr Цитата(Arlleex @ Sep 12 2018, 14:45) Если... Sep 12 2018, 12:13
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|