|
|
  |
Проблема с SD картой, Подключение карт к 5В питанию. Кто плавал, посоветуйте. |
|
|
|
Jul 3 2007, 17:30
|
Участник

Группа: Участник
Сообщений: 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, но суть дела не меняет). Там всё идёт. В реальной схеме проц виснет на инициализации.
Предположительно - ошибка в реальном железе, а именно в уровнях напряжений. Если кто знает - подскажите, где может быть подвох.
|
|
|
|
|
Jul 5 2007, 08:09
|
Частый гость
 
Группа: Свой
Сообщений: 170
Регистрация: 11-05-07
Пользователь №: 27 656

|
Цитата(Angelborn @ Jul 3 2007, 20:30)  Делители для DI, CS и CLK - сверху 2,4 кОм, снизу 4,7 кОм А почему бы не сделать выход с открытым коллектором и подтянуть резисторами к + 3V3.
|
|
|
|
|
Jul 5 2007, 08:33
|
Частый гость
 
Группа: Новичок
Сообщений: 84
Регистрация: 24-05-07
Пользователь №: 27 947

|
Цитата(Angelborn @ Jul 3 2007, 21:30)  Ноги 8 и 9 карты висят в воздухе. Так делать нельзя. Неиспользуемые линии данных нужно подтянуть к питанию, иначе могут быть проблемы. Цитата(Angelborn @ Jul 3 2007, 21:30)  Прошивка отлажена и проверена в Proteuse (там правда MMC, но суть дела не меняет). Там всё идёт. В реальной схеме проц виснет на инициализации. Меняет: инициализация SD и MMC отличается. На чем именно зацикливается инициализация?
|
|
|
|
|
Jul 5 2007, 09:28
|

Местный
  
Группа: Свой
Сообщений: 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
--------------------
Итак увидел я, что нет ничего лучше, чем наслаждаться человеку делами своими (Еккл) .
|
|
|
|
|
Jul 5 2007, 19:43
|
Участник

Группа: Участник
Сообщений: 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 (с си++ как-то не сложилось  ), чтобы инициализировать карту напрямую. Если не заработает, буду "терзать железо", а именно подтягивать выводы, уменьшать напряжение питания и т.д. А, да, кстати. К LPT буду подключать с помощью STK200 на 244-ом буфере, спаял его когда-то для программирования AVR. Сначала с помощью тех-же делителей с +5В, а если не поможет, то снижу напряжение питания до 3.3 В. Цитата(a3r3 @ Jul 5 2007, 11:33)  Меняет: инициализация SD и MMC отличается. На чем именно зацикливается инициализация? Насколько я знаю, инициализация SD и MMC в режиме SPI ничем не отличается. Если я не прав - поправьте меня, дайте ссылку на соотв. доку. Ещё выяснил, что модель карты MMC в Proteuse настолько добрая, что работает даже без инициализации карты  Отложил свой Proteus в сторону до лучших времён!
|
|
|
|
|
Jul 6 2007, 09:49
|

Местный
  
Группа: Свой
Сообщений: 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. Увеличить скорость обмена
--------------------
Итак увидел я, что нет ничего лучше, чем наслаждаться человеку делами своими (Еккл) .
|
|
|
|
|
Jul 6 2007, 18:19
|
Участник

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

|
Цитата(SALOME @ Jul 6 2007, 12:49)  Инциализация FLASH_SD карты по протоколу SPI Вот я сегодня и проколупался зря. Карточка CMD_0 сьела и "заснула". CMD_1 слать смысла нет. Теперь вот пришёл с работы и почитал свою ветку. Оказывается различается протокол! Спасибо SALOME, за то, что пролили свет. SALOME, если вам не трудно, дайте ссылку на полный документ по инициализации именно SD-карты (т.е. тот, который легче всего освоить). Я тут поскачивал pdf-ок, но всё как-то не то.
|
|
|
|
|
Jul 7 2007, 07:23
|

Местный
  
Группа: Свой
Сообщений: 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/
--------------------
Итак увидел я, что нет ничего лучше, чем наслаждаться человеку делами своими (Еккл) .
|
|
|
|
|
Jul 9 2007, 21:04
|
Участник

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

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

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

|
В своей конструкции я столкнулся с подобными проблемами - ОСНОВНАЯ из которых - ПОЧЕМУ не работает? В основу положил готовую версию программы на ассемблере под 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
--------------------
|
|
|
|
|
Jul 13 2007, 11:30
|

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

|
Цитата(QuickWitted @ Jul 13 2007, 18:09)  В своей конструкции я столкнулся с подобными проблемами - ОСНОВНАЯ из которых - ПОЧЕМУ не работает?  Проблема не нова. И не так уж проста эта FLASH карта. Я сейчас делаю на ADuC для MMC. Выкладываю кость, может она Вас развлечет. На вопросы отвечу...
--------------------
Итак увидел я, что нет ничего лучше, чем наслаждаться человеку делами своими (Еккл) .
|
|
|
|
|
Jul 13 2007, 11:48
|

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

|
Цитата(SALOME @ Jul 13 2007, 16:30)  На вопросы отвечу... Я использовал готовый исходник... там ответ един 01 ; Отправляет CMD0.Принимает отклик R1.Возвращает код отклика R1. ; Исправная карта всегда откликнется. При этом FLASH_SD может находится в спячке поэтому вопрос откликаться чем? куда не смотрел 01 а у меня 3F? Что можно покрутить? что не так делаю? У меня за это отвечает подпрограмма SPIInit в файле S_SPI.asm
--------------------
|
|
|
|
|
Jul 13 2007, 12:12
|

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

|
Цитата(QuickWitted @ Jul 13 2007, 18:48)  поэтому вопрос откликаться чем? куда не смотрел 01 а у меня 3F? Ну не обзательно в отклике R1 на команду CMD0 должно быть 01. Главное, чтобы бит7=0...Так, что у вас все нормально  . Этим вы перевели ее в режим обмена по SPI. Обратите внимание, что в CMD0 последний байт команды равен 0х95, а у всех других команд - 0xFF. Дальше карту надо инициировать (разбудить). Для этого посылаем команду CMD1. Вот здесь надо дождаться R1=0x00. Отклик R1 приходит не сразу, ну и далее смотрите мой исходник... Успехов. Я убежала....
Сообщение отредактировал SALOME - Jul 13 2007, 12:16
--------------------
Итак увидел я, что нет ничего лучше, чем наслаждаться человеку делами своими (Еккл) .
|
|
|
|
|
Jul 14 2007, 03:35
|

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

|
Цитата(SALOME @ Jul 13 2007, 17:12)  Ну не обзательно в отклике R1 на команду CMD0 должно быть 01. Главное, чтобы бит7=0...Так, что у вас все нормально  . Этим вы перевели ее в режим обмена по 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 чтение не работает что я не так делаю? Если тебе не трудно укажи прямой линк к дадащитам...
--------------------
|
|
|
|
|
Jul 14 2007, 05:04
|

Местный
  
Группа: Свой
Сообщений: 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 раз, пока не появится отклик. Даташит смотрите выше.
--------------------
Итак увидел я, что нет ничего лучше, чем наслаждаться человеку делами своими (Еккл) .
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|