Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Есть вопрос по MMC в SPI режиме
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
misyachniy
Взял пример GCC для AT91SAM7S, перетащил в IAR.
Читает медленно. Пишет сектора с ошибками. Если поставить большие паузы то без ошибок, но тоже медленно.
Начал разбиратся глубже.
В документации на конкретно мою карточку от SunDisk требуется чтобы CS был постоянно активным

Цитата
The CS signal must be continuously active for the duration of the SPI transaction (command, response and data). The only exception occurs during card programming when the host can de-assert the CS signal without affecting the programming process.

А в тексте программы после инициализации в SPI режим идет переключение на автоматический CS
Цитата
// enable automatic chip-select
pPIOA->PIO_ODR = NPCS_BSR_BIT; // input
pPIOA->PIO_CODR = NPCS_BSR_BIT; // clear
// disable PIO from controlling the CS pin (=hand over to SPI)
pPIOA->PIO_PDR = AT91C_PA13_SPI0_NPCS1; // set pin-functions in PIO Controller
pPIOA->PIO_ASR = NCPS_ASR_BIT; pPIOA->PIO_BSR = NPCS_BSR_BIT;

Поисходному тексту программы также встречаются макросы SELECT()/DESELECT() для прямого управления ножкой CS.

Что-то явно не клеится.
Как корректно работать?
Спасибо
etoja
Про Атмел можно перефразировать старый анекдот: "Дурак ты боцман, и шутки у тебя дурацкие. Торпеда мимо прошла."
Хорошие исходные тексты по работе с карточками памяти SD/MMC никто не выкладывает, равно как и стеки TCP/IP. Но начать можно с этого:
http://www.prllc.com/products/FlashFileSD-PIC.zip
К зипу пригодятся ключики: [ 2af65e9f dfb0d949 01d77f4b ]

Вот ещё короткие исходники:
misyachniy
Цитата(etoja @ Nov 13 2007, 15:42) *
Про Атмел можно перефразировать старый анекдот: "Дурак ты боцман, и шутки у тебя дурацкие. Торпеда мимо прошла."
Хорошие исходные тексты по работе с карточками памяти SD/MMC никто не выкладывает, равно как и стеки TCP/IP. Но начать можно с этого:
http://www.prllc.com/products/FlashFileSD-PIC.zip
К зипу пригодятся ключики: [ 2af65e9f dfb0d949 01d77f4b ]

Вот ещё короткие исходники:


Выкладывают.
Я выкачал проект HTTP для KEIL AT91SAM7X256, присоединил файлы к проекту на IAR.
Работает корректно. Меняю на ходу кабель прямой на кросс - детектирует. А предложеный вами архив - не раскрывается. Некорректный пароль.

Меня интересует, нужно ли CS держать активным непрерывно от начала до конца транзакции?
Kirill Frolov
Цитата(misyachniy @ Nov 13 2007, 14:45) *
Взял пример GCC для AT91SAM7S, перетащил в IAR.
Читает медленно. Пишет сектора с ошибками. Если поставить большие паузы то без ошибок, но тоже медленно.


Между байтами должны быть паузы. Просто факт. Иначе работа начинает зависеть от конкретной карточки и конкретного MCU. Соответственно регистр программируешь (там 32xN, так что меньше 32 тактов CPU не получится). Другие паузы и скорость так не влияют (если не больше пары десятков МГц на тактировании карты).

Второй момент. Карты Kingston и Transcend различаются полярностью тактовой частоты (CLK для SPI). Соответственно вначале пробуется одна, если не идёт, потом другая. При инициализации карты.

Да и CRC данных не мешало бы считать...

Советую посмотреть: http://www.siwawi.arubi.uni-kl.de/avr_proj...jects/efsl_arm/
etoja
Сигнал CS нужно удерживать в низком уровне в течении транзакции. Об это написано в официальной спецификации в разделе SPI на странице номер 100.
Выложи упомянутый тобой проект для HTTP.
misyachniy
Цитата(Kirill Frolov @ Nov 13 2007, 16:26) *
Между байтами должны быть паузы. Просто факт. Иначе работа начинает зависеть от конкретной карточки и конкретного MCU. Соответственно регистр программируешь (там 32xN, так что меньше 32 тактов CPU не получится). Другие паузы и скорость так не влияют (если не больше пары десятков МГц на тактировании карты).

Второй момент. Карты Kingston и Transcend различаются полярностью тактовой частоты (CLK для SPI). Соответственно вначале пробуется одна, если не идёт, потом другая. При инициализации карты.

Да и CRC данных не мешало бы считать...

Советую посмотреть: http://www.siwawi.arubi.uni-kl.de/avr_proj...jects/efsl_arm/


По поводу какой паузы идет речь? Я для простоты вставлял паузу перед самой операцией записи.

Выкладываю пример WEB сервера на основе AT91SAM7X256 + DM9161AE.
Исходный был от Keil. Так что лишние файлы от него остались.
Пример настраивает два канала АЦП и выводит их через HTTP протокол. Я подключал прямым и кросс кабелем к компьтеру и смотред через Oper-у.
romashko
Цитата(Kirill Frolov @ Nov 13 2007, 23:26) *
Карты Kingston и Transcend различаются полярностью тактовой частоты (CLK для SPI). Соответственно вначале пробуется одна, если не идёт, потом другая. При инициализации карты


Сам юзаю MMC 16MB от Canon'а - работает при любой полярности SPI, а вот Kingston MMC+ 128MB иногда не инициализируется с первого раза...
Cо второго, третьего и т.д. - всё нормально. Может быть из-за этого?

Цитата(etoja @ Nov 13 2007, 23:37) *
Сигнал CS нужно удерживать в низком уровне в течении транзакции. Об это написано в официальной спецификации..


тогда в ARM9200 рулить CS-ом токо как ГПИО и софтварно, ибо битовых полей lastxfer и cssat в его регистрах не предусмотрено (как в SAM7)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.