-=Женек=- 0 6 июня, 2010 Опубликовано 6 июня, 2010 · Жалоба Господа, а что нужно делать по окончании работы с картой при использовании этой библиотеки? Не получается использовать эту библиотеку и что либо еще с SPI. Начал разбираться - у меня при вызове команды disk_initialize(0) появляется высокий уровень на MOSI и MISO. Причем наличие карты не обязательно. На CS низкий уровень и командой AT91C_BASE_PIOA->PIO_SODR=(1<<11); он не становится высоким. Шайтан какой-то... А ведь мне предстоит читать блок из файла и передавать его по SPI не отключая карту... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 9 июня, 2010 Опубликовано 9 июня, 2010 · Жалоба 1. #define __ramfunc /* Ничего, поживет и во флеши, нам проект пока собрать надо */ 2. Перед timer0_c_irq_handler написать: #pragma arm section code = "ramfunc", после - #pragma arm section code В области RAM scatter-файла добавить запись * (ramfunc) попробовал. Все компилится, функции в IRAM не размещаются... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Wano 0 17 июня, 2010 Опубликовано 17 июня, 2010 · Жалоба попробовал. Все компилится, функции в IRAM не размещаются... Короче вывод такой(в кейле): сколько десятков раз на форуме про это спрашивали, так ничего путёвого и не сказали. Походу выход один : Alt+F7 на файле, Code/Const в IRAM. Осилить премудрости scatter-а может и можно,но .... :smile3046: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 17 июня, 2010 Опубликовано 17 июня, 2010 · Жалоба Неправильный вывод. Много раз на форуме разъясняли, как пользоваться scatter'ом. Если что-то не получается, задайте конкретный вопрос и приложите свой скрипт и выдержки из кода. А галочки оставьте халтурщикам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikitoc 0 28 июня, 2010 Опубликовано 28 июня, 2010 (изменено) · Жалоба To zheka: я "портировал" FatFs на at91sam7s256 месяца 3 назад. Это был экспериментальный проект. Со скачанным кодом я не разбирался, просто почитал описание основных процедур ну и добавил низкоуровневые ф-ции чтения-записи на SDшку. С 2Гб Kingston'ом все работало. Скорость там была, конечно, не ахти, но работало. Если хотите, могу скинуть Вам проектик в Keil'е. Там, конечно, неопрятно все, но при желании разобраться можно. Если, это интересно еще кому-нибудь, могу выложить архивчиком. Изменено 28 июня, 2010 пользователем Nikitoc Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 1 29 июня, 2010 Опубликовано 29 июня, 2010 · Жалоба Скорость там была, конечно, не ахти, но работало. А почему скорость "не ахти"? В районе скольки КБ/сек? FatFs вполне быстрая система, тем более на АРМе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikitoc 0 29 июня, 2010 Опубликовано 29 июня, 2010 · Жалоба А почему скорость "не ахти"? В районе скольки КБ/сек? Честно скажу - скорость не помню. Возможно, конечно, тестирование было не слишком объективным: я записывал через картридер файл, а во время тестирования ARM создавал на карточке еще один и копировал в него содержимое первого файла. Дело занимало несколько секунд, но я не помню размера файла-источника, чтобы даже примерно ответить, какая была скорость. Честно говоря, самому досадно. Когда понадобится применить это в каком-нибудь проекте придется заново разбираться :cranky: Помню, правда, что в значительной мере, скорость работы ограничивалась SD-картой (в частности, процессом чтения). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 1 29 июня, 2010 Опубликовано 29 июня, 2010 · Жалоба Хм, скорость чтения у SD карточек исчисляется мегабайтами в секунду. Может быть, узким местом был интерфейс - например, SPI? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikitoc 0 29 июня, 2010 Опубликовано 29 июня, 2010 · Жалоба Может быть, узким местом был интерфейс - например, SPI? Возможно. Тактовая частота 25Мгц. Резисторы согласования (33 Ом) я не ставил. Наблюдалась такая странность: при потоковом чтении между считыванием секторов приходилось делать задержку ~100us (и это не ожидание 0xFE, а именно пауза без тактирования !). Иначе не читалось. Возможно это была особенность той карточки. При потоковой записи такого не наблюдалось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 1 29 июня, 2010 Опубликовано 29 июня, 2010 · Жалоба Возможно. Тактовая частота 25Мгц. Резисторы согласования (33 Ом) я не ставил. Наблюдалась такая странность: при потоковом чтении между считыванием секторов приходилось делать задержку ~100us (и это не ожидание 0xFE, а именно пауза без тактирования !). Иначе не читалось. Возможно это была особенность той карточки. При потоковой записи такого не наблюдалось. Вполне возможно, что это нормально. Карте надо время, чтобы подготовить данные. Зато потом они идут практически сплошным потоком. А в Вашем случае токен начала передачи 0xfe что, совсем отсутствовал без снятия клока? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikitoc 0 29 июня, 2010 Опубликовано 29 июня, 2010 (изменено) · Жалоба А в Вашем случае токен начала передачи 0xfe что, совсем отсутствовал без снятия клока? Ну, точно не помню, конечно, но чтение зависало на первом же буфере (2048 байт) после первого или второго сектора, если не было паузы. Вполне возможно, что это нормально. Карте надо время, чтобы подготовить данные. Зато потом они идут практически сплошным потоком. Это было бы классно, если бы можно было предугадать - когда нужна пауза, а когда нет. Изменено 29 июня, 2010 пользователем Nikitoc Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 1 29 июня, 2010 Опубликовано 29 июня, 2010 · Жалоба Это было бы классно, если бы можно было предугадать - когда нужна пауза, а когда нет. Согласно документации: 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikitoc 0 29 июня, 2010 Опубликовано 29 июня, 2010 · Жалоба Согласно документации: 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 мкс - дальше чтение не шло. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться