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

 
 
> Есть вопрос по 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
Ответов (1 - 6)
etoja
сообщение Nov 13 2007, 12:42
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 121
Регистрация: 14-01-05
Из: Москва
Пользователь №: 1 952



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

Вот ещё короткие исходники:
Прикрепленные файлы
Прикрепленный файл  sd_spi_ep93xx.rar ( 4.43 килобайт ) Кол-во скачиваний: 57
 
Go to the top of the page
 
+Quote Post
misyachniy
сообщение Nov 13 2007, 13:02
Сообщение #3


Знающий
****

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



Цитата(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 держать активным непрерывно от начала до конца транзакции?
Go to the top of the page
 
+Quote Post
Kirill Frolov
сообщение Nov 13 2007, 13:26
Сообщение #4


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

Группа: Новичок
Сообщений: 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
etoja
сообщение Nov 13 2007, 13:37
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 121
Регистрация: 14-01-05
Из: Москва
Пользователь №: 1 952



Сигнал CS нужно удерживать в низком уровне в течении транзакции. Об это написано в официальной спецификации в разделе SPI на странице номер 100.
Выложи упомянутый тобой проект для HTTP.
Прикрепленные файлы
Прикрепленный файл  Part1_v1.0__sdphysical.pdf ( 685.1 килобайт ) Кол-во скачиваний: 148
 
Go to the top of the page
 
+Quote Post
misyachniy
сообщение Nov 13 2007, 15:32
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 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
romashko
сообщение Nov 14 2007, 07:06
Сообщение #7


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

Группа: Свой
Сообщений: 85
Регистрация: 25-12-06
Пользователь №: 23 865



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

Сообщение отредактировал romashko - Nov 14 2007, 07:04
Go to the top of the page
 
+Quote Post

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

 


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


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