Перейти к содержанию
    

Ищу функции работы с SD картой, написанные для KEIL и SAM7

Господа, а что нужно делать по окончании работы с картой при использовании этой библиотеки?

Не получается использовать эту библиотеку и что либо еще с SPI. Начал разбираться - у меня при вызове команды disk_initialize(0) появляется высокий уровень на MOSI и MISO. Причем наличие карты не обязательно. На CS низкий уровень и командой AT91C_BASE_PIOA->PIO_SODR=(1<<11); он не становится высоким.

Шайтан какой-то...

 

А ведь мне предстоит читать блок из файла и передавать его по SPI не отключая карту...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. #define __ramfunc /* Ничего, поживет и во флеши, нам проект пока собрать надо */

2. Перед timer0_c_irq_handler написать: #pragma arm section code = "ramfunc", после - #pragma arm section code

В области RAM scatter-файла добавить запись * (ramfunc)

попробовал. Все компилится, функции в IRAM не размещаются...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

попробовал. Все компилится, функции в IRAM не размещаются...

 

Короче вывод такой(в кейле): сколько десятков раз на форуме про это спрашивали, так ничего путёвого и не сказали.

Походу выход один : Alt+F7 на файле, Code/Const в IRAM. Осилить премудрости scatter-а может и можно,но .... :smile3046:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Неправильный вывод. Много раз на форуме разъясняли, как пользоваться scatter'ом. Если что-то не получается, задайте конкретный вопрос и приложите свой скрипт и выдержки из кода.

А галочки оставьте халтурщикам.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

To zheka: я "портировал" FatFs на at91sam7s256 месяца 3 назад. Это был экспериментальный проект. Со скачанным кодом я не разбирался, просто почитал описание основных процедур ну и добавил низкоуровневые ф-ции чтения-записи на SDшку. С 2Гб Kingston'ом все работало. Скорость там была, конечно, не ахти, но работало. Если хотите, могу скинуть Вам проектик в Keil'е. Там, конечно, неопрятно все, но при желании разобраться можно. Если, это интересно еще кому-нибудь, могу выложить архивчиком.

Изменено пользователем Nikitoc

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скорость там была, конечно, не ахти, но работало.

А почему скорость "не ахти"?

В районе скольки КБ/сек?

FatFs вполне быстрая система, тем более на АРМе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А почему скорость "не ахти"?

В районе скольки КБ/сек?

Честно скажу - скорость не помню. Возможно, конечно, тестирование было не слишком объективным: я записывал через картридер файл, а во время тестирования ARM создавал на карточке еще один и копировал в него содержимое первого файла. Дело занимало несколько секунд, но я не помню размера файла-источника, чтобы даже примерно ответить, какая была скорость. Честно говоря, самому досадно. Когда понадобится применить это в каком-нибудь проекте придется заново разбираться :cranky:

Помню, правда, что в значительной мере, скорость работы ограничивалась SD-картой (в частности, процессом чтения).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хм, скорость чтения у SD карточек исчисляется мегабайтами в секунду.

Может быть, узким местом был интерфейс - например, SPI?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может быть, узким местом был интерфейс - например, SPI?

Возможно. Тактовая частота 25Мгц. Резисторы согласования (33 Ом) я не ставил. Наблюдалась такая странность: при потоковом чтении между считыванием секторов приходилось делать задержку ~100us (и это не ожидание 0xFE, а именно пауза без тактирования !). Иначе не читалось. Возможно это была особенность той карточки. При потоковой записи такого не наблюдалось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возможно. Тактовая частота 25Мгц. Резисторы согласования (33 Ом) я не ставил. Наблюдалась такая странность: при потоковом чтении между считыванием секторов приходилось делать задержку ~100us (и это не ожидание 0xFE, а именно пауза без тактирования !). Иначе не читалось. Возможно это была особенность той карточки. При потоковой записи такого не наблюдалось.

Вполне возможно, что это нормально.

Карте надо время, чтобы подготовить данные.

Зато потом они идут практически сплошным потоком.

 

А в Вашем случае токен начала передачи 0xfe что, совсем отсутствовал без снятия клока?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А в Вашем случае токен начала передачи 0xfe что, совсем отсутствовал без снятия клока?

Ну, точно не помню, конечно, но чтение зависало на первом же буфере (2048 байт) после первого или второго сектора, если не было паузы.

Вполне возможно, что это нормально.

Карте надо время, чтобы подготовить данные.

Зато потом они идут практически сплошным потоком.

Это было бы классно, если бы можно было предугадать - когда нужна пауза, а когда нет.

Изменено пользователем Nikitoc

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это было бы классно, если бы можно было предугадать - когда нужна пауза, а когда нет.

Согласно документации: Block Read Access Time 0.5 ms - 100 ms (max).

 

Алгоритм мультисекторного чтения простой:

1. Даём команду CMD18, через NCR (максимум 64 клока) получаем ответ.

2. Ждём токен 0xfe (он появится через 0.5 ms - 100 ms).

3. Читаем 512 байтный сектор.

4. переходим на п.2 пока не прочтём все сектора.

5. Прекращаем чтение командой CMD12.

 

Мне пришлось поработать всего с несколькими карточками, но проблем с тормозами не было - прямое мультисекторное чтение давало скорость в 1.4 мегабайта в сек. на 12 МГц (или 18 МГц - уже не помню) SPI.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Согласно документации: Block Read Access Time 0.5 ms - 100 ms (max).

Алгоритм мультисекторного чтения простой:

1. Даём команду CMD18, через NCR (максимум 64 клока) получаем ответ.

2. Ждём токен 0xfe (он появится через 0.5 ms - 100 ms).

3. Читаем 512 байтный сектор.

4. переходим на п.2 пока не прочтём все сектора.

5. Прекращаем чтение командой CMD12.

Да я в общем-то так и делал, доходил до 4-го пункта без проблем, но если после него не прекращал тактирование на 100 мкс - дальше чтение не шло.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...