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

 
 
9 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Проблема с SD картой, Подключение карт к 5В питанию. Кто плавал, посоветуйте.
Angelborn
сообщение Jul 3 2007, 17:30
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 12-06-07
Пользователь №: 28 387



Вобщем эту тему можно было и не открывать, рядом есть такая же, но тут другой вопрос рассматривается. Думаю, модераторы форума меня поймут.

Суть проблемы в том, что карта SD не откликается на инициализацию, а проц попросту зацикливается. Режим используется SPI.

Сейчас растолкую схему.

Карта - miniSD из комплекта Nokia 6280. Так и наз. "NOKIA"
Проц - ATtiny2313, частота 1,3824 МГц (11,0592/8)
Питание проца +5В
Питание карты - через IRU101033 (+3,3В)
Делители для DI, CS и CLK - сверху 2,4 кОм, снизу 4,7 кОм
DO подается напрямую на ногу проца.
Используется порт B (выв. 12-15)
Ноги 8 и 9 карты висят в воздухе.

В софте ошибок быть не может. Прошивка отлажена и проверена в Proteuse (там правда MMC, но суть дела не меняет). Там всё идёт. В реальной схеме проц виснет на инициализации.

Предположительно - ошибка в реальном железе, а именно в уровнях напряжений. Если кто знает - подскажите, где может быть подвох.
Go to the top of the page
 
+Quote Post
TBI
сообщение Jul 5 2007, 08:09
Сообщение #2


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

Группа: Свой
Сообщений: 170
Регистрация: 11-05-07
Пользователь №: 27 656



Цитата(Angelborn @ Jul 3 2007, 20:30) *
Делители для DI, CS и CLK - сверху 2,4 кОм, снизу 4,7 кОм


А почему бы не сделать выход с открытым коллектором и подтянуть резисторами к + 3V3.
Go to the top of the page
 
+Quote Post
a3r3
сообщение Jul 5 2007, 08:33
Сообщение #3


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

Группа: Новичок
Сообщений: 84
Регистрация: 24-05-07
Пользователь №: 27 947



Цитата(Angelborn @ Jul 3 2007, 21:30) *
Ноги 8 и 9 карты висят в воздухе.

Так делать нельзя. Неиспользуемые линии данных нужно подтянуть к питанию, иначе могут быть проблемы.

Цитата(Angelborn @ Jul 3 2007, 21:30) *
Прошивка отлажена и проверена в Proteuse (там правда MMC, но суть дела не меняет). Там всё идёт. В реальной схеме проц виснет на инициализации.

Меняет: инициализация SD и MMC отличается. На чем именно зацикливается инициализация?
Go to the top of the page
 
+Quote Post
SALOME
сообщение Jul 5 2007, 09:28
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 311
Регистрация: 11-06-07
Из: Российская империя, 1861г.
Пользователь №: 28 349



Цитата(Angelborn @ Jul 4 2007, 00:30) *
В софте ошибок быть не может. Прошивка отлажена и проверена в Proteuse (там правда MMC, но суть дела не меняет). Там всё идёт. В реальной схеме проц виснет на инициализации.

Ну во первых, напряжение питание и напряжение уровней остальных выводов SPI должны быть одинаковы и в пределах 2,0 - 3,6В. Не буду утверждать, но 5В это многовато, хотя бывает и толейрантно (про это в datasheet).
Во вторых, ММС и SD (особенно больших объемов памяти) все таки отличаются по протоколам инициализации. Надо смотреть свежий datasheet.

Сообщение отредактировал SALOME - Jul 5 2007, 09:32


--------------------
Итак увидел я, что нет ничего лучше, чем наслаждаться человеку делами своими (Еккл) .
Go to the top of the page
 
+Quote Post
Angelborn
сообщение Jul 5 2007, 19:43
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 12-06-07
Пользователь №: 28 387



Цитата(TBI @ Jul 5 2007, 11:09) *
А почему бы не сделать выход с открытым коллектором и подтянуть резисторами к + 3V3.


Ну я уже где-то видел такой делитель, где-то на немецком сайте. Конечно, коллектор - это вариант. В конечном итоге так и сделаю.

Цитата(SALOME @ Jul 5 2007, 12:28) *
Ну во первых, напряжение питание и напряжение уровней остальных выводов SPI должны быть одинаковы и в пределах 2,0 - 3,6В. Не буду утверждать, но 5В это многовато, хотя бывает и толейрантно (про это в datasheet).
Во вторых, ММС и SD (особенно больших объемов памяти) все таки отличаются по протоколам инициализации. Надо смотреть свежий datasheet.


Забыл указать обьём - 64М. Думаю, это не так много.

Из-за другой работы пришлось немного отложить это дело. Но завтра подключу карту к LPT и без всяких процов посмотрю на ответы карты. Сейчас сел писать программу на Visual Basic (с си++ как-то не сложилось smile.gif ), чтобы инициализировать карту напрямую.
Если не заработает, буду "терзать железо", а именно подтягивать выводы, уменьшать напряжение питания и т.д.
А, да, кстати. К LPT буду подключать с помощью STK200 на 244-ом буфере, спаял его когда-то для программирования AVR. Сначала с помощью тех-же делителей с +5В, а если не поможет, то снижу напряжение питания до 3.3 В.


Цитата(a3r3 @ Jul 5 2007, 11:33) *
Меняет: инициализация SD и MMC отличается. На чем именно зацикливается инициализация?


Насколько я знаю, инициализация SD и MMC в режиме SPI ничем не отличается. Если я не прав - поправьте меня, дайте ссылку на соотв. доку.
Ещё выяснил, что модель карты MMC в Proteuse настолько добрая, что работает даже без инициализации карты smile.gif Отложил свой Proteus в сторону до лучших времён!
Go to the top of the page
 
+Quote Post
SALOME
сообщение Jul 6 2007, 09:49
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 311
Регистрация: 11-06-07
Из: Российская империя, 1861г.
Пользователь №: 28 349



Цитата(Angelborn @ Jul 6 2007, 02:43) *
Насколько я знаю, инициализация SD и MMC в режиме SPI ничем не отличается.


Function: Инциализация FLASH_SD карты по протоколу SPI
Description: Перевести карту в режим SPI, и разбудить.
1.Переход на SPI протокол (инициализация):
- после подачи питания: Fclk<400KHz; синхронизация и сдвиг бита по переднему
нарастающему фронту, пассивный уровень CLK -0;
- не подавая CS=0, оправить по SPI 10 пустых байт;
- подать команду CMD0 (сброс) и получить отклик 0х01. Bit_7=0 означает, что карта
откликнулась, Bit_0=1 - находится в спячке. Режим SPI сохранится до выключения питания.
2.Активизация карты в SPI режиме:
- подать CMD8 с аргументом пит. напряжения и емкости карты. Если в отклике эта команда
допустима (Bit_2=0), то карта ver2.00 и выше и она по напряжению совместима. Далее ее
следует вывести из спячки командой CMD41 и проверить емкость CMD58.
-если отклик R1 на CMD8 неверен, то применить ACMD41. Если карта не выходит из спячки,
то это не SD_карта.
-для MMC_карты применяется команда CMD1.
3. Увеличить скорость обмена


--------------------
Итак увидел я, что нет ничего лучше, чем наслаждаться человеку делами своими (Еккл) .
Go to the top of the page
 
+Quote Post
Angelborn
сообщение Jul 6 2007, 18:19
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 12-06-07
Пользователь №: 28 387



Цитата(SALOME @ Jul 6 2007, 12:49) *
Инциализация FLASH_SD карты по протоколу SPI


Вот я сегодня и проколупался зря. Карточка CMD_0 сьела и "заснула". CMD_1 слать смысла нет.
Теперь вот пришёл с работы и почитал свою ветку.
Оказывается различается протокол!
Спасибо SALOME, за то, что пролили свет.

SALOME, если вам не трудно, дайте ссылку на полный документ по инициализации именно SD-карты (т.е. тот, который легче всего освоить). Я тут поскачивал pdf-ок, но всё как-то не то.
Go to the top of the page
 
+Quote Post
SALOME
сообщение Jul 7 2007, 07:23
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 311
Регистрация: 11-06-07
Из: Российская империя, 1861г.
Пользователь №: 28 349



Цитата(Angelborn @ Jul 7 2007, 01:19) *
SALOME, если вам не трудно, дайте ссылку на полный документ по инициализации именно SD-карты (т.е. тот, который легче всего освоить). Я тут поскачивал pdf-ок, но всё как-то не то.

Для ММС можно больше практических примеров найти. Кстати причиной колупания может быть и не вполне исправная карта, извините за банальность. У меня такое было. Т.е. что-то принимает, а что-то нет.
http://www.sdcard.org/
http://www.sandisk.com/Oem/Manuals/


--------------------
Итак увидел я, что нет ничего лучше, чем наслаждаться человеку делами своими (Еккл) .
Go to the top of the page
 
+Quote Post
Angelborn
сообщение Jul 9 2007, 21:04
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 12-06-07
Пользователь №: 28 387



Спасибо ребята, всем, кто помог!
У меня всё получилось, точнее в рамках той задачи, которую я пока перед собой ставил.
Сначала подключил карту к LPT, написал прогу на VB и меня снова ожидали те же грабли: оказалось причина очень банальна. Я ждал после CMD0 ответа "0", а нужно было ждать "1". Но в VB гораздо легче отладить прогу, чем в 2051, в котором нет внутрисхемной отладки.
Следующим шагом была написана прошивка для AT89C2051, читает блок 512 байт и посылает по UART. Рабочая. Уже гонялась.
Пол-дела сделано!
Осталось дописать блок, отвечающий за ЦАП (это будет либо 8bit R-2R, либо микросхема ЦАП). Там будет слаться команда CMD18 и бесконечное считывание данных. Всё висит в голове, а времени снова нету...
И тогда чудище, под названием "Wav-плейер на AT89C2051" будет готово.
Когда получится - выложу схему и исходники.

P.S. Знаю, что сумашедший smile.gif
P.S. А карточка моя оказывается легко откликается на CMD0 и CMD1, видимо старого образца.
Go to the top of the page
 
+Quote Post
QuickWitted
сообщение Jul 13 2007, 11:09
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 322
Регистрация: 21-06-07
Из: СНГ
Пользователь №: 28 596



В своей конструкции я столкнулся с подобными проблемами -
ОСНОВНАЯ из которых - ПОЧЕМУ не работает? sad.gif

В основу положил готовую версию программы на ассемблере под AVR...

тут в архивчике в начале топика.
http://olympus.partak.ru/forum/viewtopic.p...c87f00458d4a4c8

пока делаю бук ридер...

Переделал исходник, откопал несколько багов, но после запуска выплыли проблемы
с инициализацией...

Карта MMC 32 мега... 9 и 8 концов нет...

1) в ответ на Reset вместо 01h стабильно выплывает 3F

A) Надо отправить более 74 сигналов CLK при CS и MOSI =1
Проще говоря послать 10 байтов 0xFF
В) Надо отправить команду Reset (40h) без параметров
C) Надо считать ответ от карты (нормальный ответ 01h)

2) при попытке прочесть выдаёт ошибку (не 0 ответ) на CMD17 до
запуска CMD13 который первый раз после включения выдаёт 0E00 а потом всегда 0000

3) далее после запуска CMD13 и прохода 1 части CMD17, не проходит проверка на данные
cpi R16_Tmp1,0xFE , если её заремить оно читает, но возвращает все нули...

В файле схема, исходник и дока...
[attachment=12453:attachment]

Сообщение отредактировал QuickWitted - Jul 13 2007, 11:11


--------------------
Сайт с разработками http://www.mindrunway.ru/
Go to the top of the page
 
+Quote Post
SALOME
сообщение Jul 13 2007, 11:30
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 311
Регистрация: 11-06-07
Из: Российская империя, 1861г.
Пользователь №: 28 349



Цитата(QuickWitted @ Jul 13 2007, 18:09) *
В своей конструкции я столкнулся с подобными проблемами -
ОСНОВНАЯ из которых - ПОЧЕМУ не работает? sad.gif

Проблема не нова. И не так уж проста эта FLASH карта. Я сейчас делаю на ADuC для MMC. Выкладываю кость, может она Вас развлечет. На вопросы отвечу...
Прикрепленные файлы
Прикрепленный файл  FLASH_SD.zip ( 3.09 килобайт ) Кол-во скачиваний: 785
 


--------------------
Итак увидел я, что нет ничего лучше, чем наслаждаться человеку делами своими (Еккл) .
Go to the top of the page
 
+Quote Post
QuickWitted
сообщение Jul 13 2007, 11:48
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 322
Регистрация: 21-06-07
Из: СНГ
Пользователь №: 28 596



Цитата(SALOME @ Jul 13 2007, 16:30) *
На вопросы отвечу...


Я использовал готовый исходник... там ответ един 01

; Отправляет CMD0.Принимает отклик R1.Возвращает код отклика R1.
; Исправная карта всегда откликнется. При этом FLASH_SD может находится в спячке

поэтому вопрос откликаться чем? куда не смотрел 01 а у меня 3F?
Что можно покрутить? что не так делаю?

У меня за это отвечает подпрограмма SPIInit в файле S_SPI.asm


--------------------
Сайт с разработками http://www.mindrunway.ru/
Go to the top of the page
 
+Quote Post
SALOME
сообщение Jul 13 2007, 12:12
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 311
Регистрация: 11-06-07
Из: Российская империя, 1861г.
Пользователь №: 28 349



Цитата(QuickWitted @ Jul 13 2007, 18:48) *
поэтому вопрос откликаться чем? куда не смотрел 01 а у меня 3F?

Ну не обзательно в отклике R1 на команду CMD0 должно быть 01. Главное, чтобы бит7=0...Так, что у вас все нормально smile.gif. Этим вы перевели ее в режим обмена по SPI. Обратите внимание, что в CMD0 последний байт команды равен 0х95, а у всех других команд - 0xFF. Дальше карту надо инициировать (разбудить). Для этого посылаем команду CMD1. Вот здесь надо дождаться R1=0x00. Отклик R1 приходит не сразу, ну и далее смотрите мой исходник... Успехов. Я убежала....

Сообщение отредактировал SALOME - Jul 13 2007, 12:16


--------------------
Итак увидел я, что нет ничего лучше, чем наслаждаться человеку делами своими (Еккл) .
Go to the top of the page
 
+Quote Post
QuickWitted
сообщение Jul 14 2007, 03:35
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 322
Регистрация: 21-06-07
Из: СНГ
Пользователь №: 28 596



Цитата(SALOME @ Jul 13 2007, 17:12) *
Ну не обзательно в отклике R1 на команду CMD0 должно быть 01. Главное, чтобы бит7=0...Так, что у вас все нормально smile.gif. Этим вы перевели ее в режим обмена по SPI.


Из того что я прочёл по ММС следует вывод:

0- В спящем режиме - карта находится в спящем режиме и выполняется процесс инициализации;
1- Erase reset - стирание не выполнено, т.к операция прервана до исполнения;
2- Недопустимая команда - обнаружен недопустимый номер команды;
3- Ошибка CRC - последняя принятая команда не прошла проверку CRC;
4- Erase_seq_error - ошибка в команде стирания;
5- Ошибка адреса - блок пересекает границу физического сектора;
6- Ошибка параметра - аргумент команды вне допустимых пределов для данной карты.
7- всегда ноль

И с какого 0-5 единицы?

Что-то тут не так подумал колобок - медленно пережёвывая остатки лисы (Анекдот)

Цитата
Обратите внимание, что в CMD0 последний байт команды равен 0х95, а у всех других команд - 0xFF.


Почему? 0х95 - контрольная сумма, а 0xFF тут при чём?
(CRC16 проверяется только при первой команде)
в др. примерах 0х95 постоянно...

Цитата
Дальше карту надо инициировать (разбудить). Для этого посылаем команду CMD1. Вот здесь надо дождаться R1=0x00. Отклик R1 приходит не сразу, ну и далее смотрите мой исходник...


Вопрос почему после CMD0 и CMD1 чтение не работает что я не так делаю?

Если тебе не трудно укажи прямой линк к дадащитам...


--------------------
Сайт с разработками http://www.mindrunway.ru/
Go to the top of the page
 
+Quote Post
SALOME
сообщение Jul 14 2007, 05:04
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 311
Регистрация: 11-06-07
Из: Российская империя, 1861г.
Пользователь №: 28 349



Цитата(QuickWitted @ Jul 14 2007, 10:35) *
И с какого 0-5 единицы?

Почему? 0х95 - контрольная сумма, а 0xFF тут при чём?
Вопрос почему после CMD0 и CMD1 чтение не работает что я не так делаю?

Если тебе не трудно укажи прямой линк к дадащитам...

Вы не пока заморачивайтесь на остальных битах отклика от CMD0. Если Вы получили отклик с bit7=0, то карта жива и готова к обмену по SPI.
0х95 в CMD0, потому, что до этого карта может работать по другим протоколам обмена (не SPI) и там важна контрольная сумма (CRC). При работе в SPI контрольная сумма не высчитается, а этот байт играет другую роль.
Причины, почему не просыпается Ваша карта после CMD1. (Надеюсь, что осцилом вы смотрите на все происходящее у вас на линиях SPI?):
Неправлиьно настроен интерфейс SPI (не совпадает фаза, полярность, скорость)
Не посылаете пустой байт перед отправкой команды
Не соблюдаете задержку Ncr при получении отклика R1
У Вас не ММС карта
У Вас живая, но неисправная карта и т.д.
Еще раз напоминаю, что команду CMD1 следует повторить не менее 100 раз, пока не появится отклик.
Даташит смотрите выше.


--------------------
Итак увидел я, что нет ничего лучше, чем наслаждаться человеку делами своими (Еккл) .
Go to the top of the page
 
+Quote Post

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

 


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


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