Dron_Gus 2 4 ноября, 2008 Опубликовано 4 ноября, 2008 · Жалоба Кристал селект ручками попробуйте дергать. У САМов были проблеммы с автоматическим дерганьем. Кристал селект не успевал уйти в ноль между посылками. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 4 ноября, 2008 Опубликовано 4 ноября, 2008 · Жалоба Кристал селект ручками попробуйте дергать. У САМов были проблеммы с автоматическим дерганьем. Кристал селект не успевал уйти в ноль между посылками. Да он и так ручками дергается. Просто товарищ Вашему совету про оверраны и сброс приемника напрасно совершенно не внял. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
JohnSilver 1 4 ноября, 2008 Опубликовано 4 ноября, 2008 · Жалоба CS дергаю вручную DESELECT(); Delay_mks (100); SELECT(); Delay_mks (100); Если и в этом месте убрать хоть одну задержку - команда не проходит. Очень даже внял. Я же сказал "уже сделал". Расшифруйте понятие оверран в данном контексте, пожалуйста. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 4 ноября, 2008 Опубликовано 4 ноября, 2008 · Жалоба Очень даже внял. Я же сказал "уже сделал". Тогда выложите получившийся вариант. И желательно без загадок типа "SPI_MODE". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Wano 0 4 ноября, 2008 Опубликовано 4 ноября, 2008 · Жалоба Тогда выложите получившийся вариант. И желательно без загадок типа "SPI_MODE". Кароче есть ещё офигенная фича: скорость инициализации карточки по SPI не более 200кГерц(у меня на 200 уже не пахало). Если сразу, после подачи питания, пихать данные карточке со скоростью 20МГц, она ничерта не принимает. Больше со своей стороны глюков не видел.В EFSL есть исходник для работы на атмеге.Заменить передачу/приём байтов на свой и усё как по маслу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 4 ноября, 2008 Опубликовано 4 ноября, 2008 · Жалоба Кароче есть ещё офигенная фича: скорость инициализации карточки по SPI не более 200кГерц(у меня на 200 уже не пахало). Такого ограничения нет. В режиме инициализации скорость должна быть не более 400kHz, но только для обеспечения совместимости с MMC, картам SD все равно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
JohnSilver 1 5 ноября, 2008 Опубликовано 5 ноября, 2008 · Жалоба Вощем добил работу с картой. Испытал создание директории, создание файла, запись в файл. Все работает только с задержками. Скорость инициализации ставил от 188 до 400 кГц - все равно требует задержки. Token отлавливаю софтовым SPI, как рекомендовал QuickWitted :a14: (http://www.swordgreenline.narod.ru/BookReader.html), иначе все 3 мои карточки не отвечают нормально. Использовал FatFs. Интерфейс карты портирован с EFSL. Проц - SAM7S64 Плата - самопал Карты - MMC Canon 16 MB, microSD SanDisk 512MB, SDHC Transdent 2MB Дисплей - LS020 от Siemens S65 IDE - IAR 5.2 Проект сырой. Работает только в конфигурации Debug_Flash (еще не разобрался с ремапами). За стиль не ругайтесь сильно, это мой 2-ой проект. Если, уважаемый aaarrr, посмотрите, буду весьма признателен. CarController.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Wano 0 5 ноября, 2008 Опубликовано 5 ноября, 2008 · Жалоба Такого ограничения нет. В режиме инициализации скорость должна быть не более 400kHz, но только для обеспечения совместимости с MMC, картам SD все равно. Не может такого быть, я на SD как раз и пробовал, может какая старая была, ещё на 32 метра. Ставлю передачу больше 200 кГц и не инициализируется. Зато если инит на 150кГц, а уже потом 20МГц то всё ок. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 5 ноября, 2008 Опубликовано 5 ноября, 2008 · Жалоба Не может такого быть, я на SD как раз и пробовал, может какая старая была, ещё на 32 метра. Ставлю передачу больше 200 кГц и не инициализируется. Зато если инит на 150кГц, а уже потом 20МГц то всё ок. В спецификации есть вполне конкретная цифра - 400kHz. И примечание, что сделано это для совместимости с MMC. А у Вас дело, по всей видимости, в чем-то другом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dron_Gus 2 6 ноября, 2008 Опубликовано 6 ноября, 2008 · Жалоба Проект сырой. Работает только в конфигурации Debug_Flash (еще не разобрался с ремапами). За стиль не ругайтесь сильно, это мой 2-ой проект. Если, уважаемый aaarrr, посмотрите, буду весьма признателен. Хотя просили и не меня... Посмотрел. У вас функция xmit_spi() оставляет после себя невычитаные данные. Если уж так хочется посылать и не ждать приема (хотя ждать там не долго) перепишите функцию отправки с приемом как-нибудь так static BYTE rcvr_spi (char dat) { char res; if (AT91C_BASE_SPI->SPI_SR & AT91C_SPI_RDRF) res = (BYTE)( AT91C_BASE_SPI->SPI_RDR ); while (AT91C_BASE_SPI->SPI_SR & AT91C_SPI_TDRE==0); AT91F_SPI_PutChar (AT91C_BASE_SPI, dat, 1); while (AT91C_BASE_SPI->SPI_SR & AT91C_SPI_RDRF==0); res = (BYTE)( AT91C_BASE_SPI->SPI_RDR ); Delay_mks(100); return res; } Т.е. проверяйте, не осталось ли с прошлой посылки что-то непрочитанное. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
JohnSilver 1 6 ноября, 2008 Опубликовано 6 ноября, 2008 (изменено) · Жалоба Спасибо за ответ. Попробую, хотя меня берут сомнения в целесообразности. Ведь я пользуюсь только функцией rcvr_spi, и в конце всегда вычитываю буфер приема, откуда взяться невычитанным данным. Или я что-то не учел? Нашел баг в либе FatFs. Fres = f_getfree(0, &p1, &pfs); CardSize = (DWORD)(pfs->max_clust - 2) * pfs->csize / 2; FreeSize = p1 * pfs->csize / 2; BuzySize = CardSize - FreeSize; Для MMC и SDv1 свободное место считает нормально. Для SDv2 - врет (карта почти пустая, а из 2 ГБ высчитывает свободных ~200 кБ). Изменено 6 ноября, 2008 пользователем John Silver Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
JohnSilver 1 7 ноября, 2008 Опубликовано 7 ноября, 2008 · Жалоба Контроль буфера приема перед новым чтением с карты, ситуацию не поменял. Убрал задержки после изменения CS, оставил задержку только в фукции чтения SPI. Уменьшил задержку: 80 мкс - все читает, SDv2 врет свободное место 60 мкс - все читает, SDv2 врет свободное место 50 мкс - SDv2 читает нормально свободное место 40 мкс - SDv2 читает нормально свободное место 25 мкс - не инициализирует почистил контакты 30 мкс - все читает 20 мкс - не инициализирует 10 мкс - не инициализирует Остановлся на 40мкс. Хотя раньше на 50мкс уже ничего не проходило. Функция f_getfree(0, &p1, &pfs) нормально работает. Вобщем мистика. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 7 ноября, 2008 Опубликовано 7 ноября, 2008 · Жалоба Таки да, мистика. Особенно вылезающие проблемы при увеличении задержки. Карта случайно не пучком проводов подключена? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
JohnSilver 1 7 ноября, 2008 Опубликовано 7 ноября, 2008 (изменено) · Жалоба Шлейф, примерно 10 см. MOSI и CLK идут сначала на дисплей, с него на карту. MISO и CS сразу на карту. На 400 кГц инициализация не проходит, всмысле, довольно низкая частота. А вообще, конечно, надо будет напрямую к разъему подпаяться короткими проводами, авось сдесь собака и порылась. Изменено 7 ноября, 2008 пользователем John Silver Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 8 ноября, 2008 Опубликовано 8 ноября, 2008 · Жалоба А вообще, конечно, надо будет напрямую к разъему подпаяться короткими проводами, авось сдесь собака и порылась. Да уж, весьма вероятно :( И еще рекомендую поставить 10к pull-up'ы на все линии SD-карты, в том числе и неиспользуемые. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться