реклама на сайте
подробности

 
 
> Есть вопрос по MMC в SPI режиме
misyachniy
сообщение Nov 13 2007, 11:45
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 716
Регистрация: 27-05-05
Из: Kyiv
Пользователь №: 5 454



Взял пример 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.

Что-то явно не клеится.
Как корректно работать?
Спасибо
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Kirill Frolov
сообщение Nov 13 2007, 13:26
Сообщение #2


Частый гость
**

Группа: Новичок
Сообщений: 111
Регистрация: 10-02-07
Из: St.Petersburg, Russia
Пользователь №: 25 241



Цитата(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/


--------------------
[ZX]
Go to the top of the page
 
+Quote Post
misyachniy
сообщение Nov 13 2007, 15:32
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 716
Регистрация: 27-05-05
Из: Kyiv
Пользователь №: 5 454



Цитата(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-у.
Прикрепленные файлы
Прикрепленный файл  EasyWEB_IAR.rar ( 331.21 килобайт ) Кол-во скачиваний: 67
 
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 11:32
Рейтинг@Mail.ru


Страница сгенерированна за 0.01401 секунд с 7
ELECTRONIX ©2004-2016