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

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

|
Цитата(QuickWitted @ Jul 23 2007, 10:44)  Теперь вопрос, а что с хардварным SPI на асме делать? На софтовом - понятно, а с хардой? Не понятно, что подразумевается под хардварным и софтовым SPI? В чем тут разница? Кстати, специально купили карту MMCmicro. Все работает так же как и с обычной ММС
--------------------
Итак увидел я, что нет ничего лучше, чем наслаждаться человеку делами своими (Еккл) .
|
|
|
|
|
Jul 23 2007, 09:29
|

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

|
Цитата(SALOME @ Jul 23 2007, 13:49)  Не понятно, что подразумевается под хардварным и софтовым SPI? В чем тут разница? Софтовый алгоритм написан командами выдать в ногу порта/считать с ноги порта бит... Хардварный (читай аппаратный) - выдвинул байт по адресу во внутренней памяти и он сам передаётся с прерыванием по окончанию Софтовый может работать на MK без аппаратного SPI Цитата Кстати, специально купили карту MMCmicro. Все работает так же как и с обычной ММС Одно НО не для всех карт !!! Повторно привожу цитату: Цитата Max_Shaman Спецификация гласит что так называемый TOKEN "синхронизирующий бит начала передачи", может появляться в любой момент тактов ожидания ответа, то-есть он может быть не кратен 8-ми циклам. Решение проблемы: надо отлавливаить не код "FE" , а всего-лишь первый нулевой бит, и по нему уже синхронизироваться, он может появляется в любое время а не так как вы его ожидаете. Я в интернете на зарубежных форумах находил исходники с подобным неправильным способом работы с карточкой и также жалобы на неспособность работы некоторых карточек от некоторых производителей. И повторно задаю вопрос: Как к этому прикрутить хардварный SPI? (И простым языком: как пояснить МК что начало передачи сдвинулось и лежит в середине байта, а хвост байта ещё не принят?)
--------------------
|
|
|
|
|
Jul 24 2007, 03:00
|

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

|
Цитата(QuickWitted @ Jul 23 2007, 16:29)  как пояснить МК что начало передачи сдвинулось и лежит в середине байта, а хвост байта ещё не принят?) Если используется "on chip SPI" то все объяснения происходят при инциализации порта SPI. Вот пример для ADuC845: MOV SPICON,#00110010b ;Initialise SPICON ; |||!||++-SPR0,1-частота тактовых SCLK=core/8 ; |||!|+---CPHA=0 фаза: вначале бит DATA, потом в середине бит SCLK ; |||!+----CPOL=0,полярность тактов SCLK - неактивный уровень - ноль ; |||+-----SPIM=1 master mode select ; ||+------SPE=1 Enable SPI serial port ; |+-------WCOL=0 ERROR write ; +--------SPI Inerrupt flag комментарий надо сдвинуть вправо до решетки #...
--------------------
Итак увидел я, что нет ничего лучше, чем наслаждаться человеку делами своими (Еккл) .
|
|
|
|
|
Jul 24 2007, 04:39
|

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

|
Цитата(SALOME @ Jul 24 2007, 08:00)  Если используется "on chip SPI" то все объяснения происходят при инциализации порта SPI. Вы меня не поняли... Карта даёт ответ В СЕРЕДИНЕ БАЙТА, и где первый бит отличный от ЕДИНИЦЫ, там и начало байта. Вопрос КАК ЭТО ОБЬЯСНИТЬ МК? Т.е. фактически надо произвести дополнительное тактирование и принять хвост байта... далее опять принимать по целому байту... Если есть возможность скорректировать счётчик в хардварном SPI... или отключить SPI протактировать самому, потом включить обратно... Кто уже решал и решил эту задачу?
--------------------
|
|
|
|
|
Jul 24 2007, 09:16
|

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

|
Цитата(QuickWitted @ Jul 24 2007, 11:39)  Карта даёт ответ В СЕРЕДИНЕ БАЙТА, и где первый бит отличный от ЕДИНИЦЫ, там и начало байта. Вопрос КАК ЭТО ОБЬЯСНИТЬ МК? С чего вы это взяли? Любое устройство, работающее в SPI выдает информацию (т.е. биты DATA) только при получении тактовых импульсов SCLK ( один бит DATA на один такт SCLK) и никак она не может "начать давать ответ" в середине байта. А то, про что вы говорите "где первый бит отличный от ЕДИНИЦЫ, там и начало байта", похоже на UART. Посмотрите все процессы по 2-х канальному осцилу, а иначе не будет Вам щастья
--------------------
Итак увидел я, что нет ничего лучше, чем наслаждаться человеку делами своими (Еккл) .
|
|
|
|
|
Jul 24 2007, 09:42
|

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

|
Цитата(SALOME @ Jul 24 2007, 14:16)  С чего вы это взяли? Любое устройство, работающее в SPI выдает информацию (т.е. биты DATA) только при получении тактовых импульсов SCLK ( один бит DATA на один такт SCLK) и никак она не может "начать давать ответ" в середине байта. В любой доке на ММС или SD посмотрите описание Ncr А после прочтения станет ясно что: Ncr - измеряется не в байтах, а в CLOCK CYCLE - а это в переводе означает один такт CLK на шине SPI. Подробно тут: http://electronix.ru/forum/index.php?showt...633?entry243656Цитата а иначе не будет Вам щастья  При ответе счастье - это когда твой ответ с мануалом не расходится
--------------------
|
|
|
|
|
Jul 24 2007, 11:09
|

Частый гость
 
Группа: Свой
Сообщений: 146
Регистрация: 6-01-05
Из: Украина
Пользователь №: 1 831

|
Цитата(QuickWitted @ Jul 24 2007, 12:42)  В любой доке на ММС или SD посмотрите описание Ncr А после прочтения станет ясно что: Ncr - измеряется не в байтах, а в CLOCK CYCLE - а это в переводе означает один такт CLK на шине SPI. Полный бред, не вводите в заблуждение если сами не читали или не понимаете Спецификация на SD ... While the SD Memory Card channel is based on command and data bit streams which are initiated by a start bit and terminated by a stop bit, the SPI channel is byte oriented. Every command or data block is built of 8-bit bytes and is byte aligned to the CS signal (i.e. the length is a multiple of 8 clock cycles). ... Таблица Timing Values Ncr - Unit - 8 clock cycles ...
|
|
|
|
|
Jul 24 2007, 11:23
|

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

|
Цитата(QuickWitted @ Jul 24 2007, 16:42)  В любой доке на ММС или SD посмотрите описание Ncr А после прочтения станет ясно что: Ncr - измеряется не в байтах, а в CLOCK CYCLE - а это в переводе означает один такт CLK на шине SPI. Прошла по ссылке. Там как раз и пинают за эту путаницу  . Все задержки, в т.ч. и Ncr измеряются именно в байтах. Обратите внимание на цифру 8 перед CLOCK CYCLE. Не может аппаратный SPI работать с циклами не кратными байту (т.е. 8 бит). Мне не попадалось... Итак для задержки нужно послать N-ое количество "пустых БАЙТ (0хFF)". Для Ncr это число от 0 до 8. Это означает, что если отклик после посылки 8-го пустого байта не пришел, то его уже не будет. Кстати "пустой" байт посылается не столько для задержки, а для того чтобы Мaster SPI (в Вашем случае это РС) послал тактовые импульсы Slave SPI (это FLASH карта) и с их помощью получил отклик. Если вы не пошлете пустой байт, то отклик не получите ни под каким видом, потому,что SPI - это СИНХРОННЫЙ интерфейс. И не хмурьте лоб на смайлике, лучше его наморщите :-)
--------------------
Итак увидел я, что нет ничего лучше, чем наслаждаться человеку делами своими (Еккл) .
|
|
|
|
|
Jul 24 2007, 11:36
|

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

|
Цитата(bmf @ Jul 24 2007, 16:09)  Полный бред, не вводите в заблуждение если сами не читали или не понимаете Спецификация на SD Всех датащитов на флеши не читал, но с десяток изучил... Цитата While the SD Memory Card channel is based on command and data bit streams which are initiated by a start bit and terminated by a stop bit, the SPI channel is byte oriented. Every command or data block is built of 8-bit bytes and is byte aligned to the CS signal (i.e. the length is a multiple of 8 clock cycles). Ну и что? И чем это противоречит? Токен FE для ловли начала и предназначен... Цитата Таблица Timing Values Ncr - Unit - 8 clock cycles Написано же НЕ У ВСЕХ производителей он КРАТЕН 8... Из спецификации на SD С.т. 4-46 таблица 4-24 "Timing Values" NCR Min - 2 Clock cycles Max - 64 Clock cycles Страницу прикладываю...[attachment=12685:attachment] Цитата(SALOME @ Jul 24 2007, 16:23)  Прошла по ссылке. Там как раз и пинают за эту путаницу  . Все задержки, в т.ч. и Ncr измеряются именно в байтах. Обратите внимание на цифру 8 перед CLOCK CYCLE. Не может аппаратный SPI работать с циклами не кратными байту (т.е. 8 бит). Во во поэтому они гибрид и делали (ловили софтово, а принимали хардварно)
--------------------
|
|
|
|
|
Jul 24 2007, 11:59
|

Частый гость
 
Группа: Свой
Сообщений: 146
Регистрация: 6-01-05
Из: Украина
Пользователь №: 1 831

|
Цитата(QuickWitted @ Jul 24 2007, 14:36)  Всех датащитов на флеши не читал, но с десяток изучил... ... Страницу прикладываю.. Как говорят: смотришь в книгу а видишь фигу Вы точно чего то не дочитали у SD есть два режима - родной SD в котором действительно битовая синхронизация и SPI - в котором только байтовая. вы привели как раз как раз таблицу для родного SD режима (в котором и эффективно работать можно только с SD контроллером). А если таковые SD с битовой синхронизацией для SPI режима есть (в чем я сильно сомневаюсь) - то это не SD, т.к. они не будут отвечать спецификации И если у когото и вылезла она в середине байта, то это из за мягко сказать неумелости - карта не переведена в режим SD или сбои по фронтам линии clock. Только и всего.
|
|
|
|
|
Jul 24 2007, 16:23
|
Участник

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

|
Вот и у меня, ребята назрел снова вопрос. Не буду добивать вас какой-то ерундой, у меня всё конкретно. После инициализации карты шлём команду CMD18 и начинаем непрерывно считать байтики. Вот в порыве своей идеи я и забыл про CRC и мой DAC стал озвучивать и эту ахинею  . Т.е. картина после посылки CMD18 такая: Block 512 byte - CRC - CRC - Block 512 byte - CRC - CRC - Block 512 byte - CRC - CRC........ и т.д. Так оно и есть. Вопрос следующий: как отключить эти CRC, чтобы посылки имели вид: Block 512 byte - Block 512 byte - Block 512 byte.... Из буржуйского даташита вычитал, что есть такая команда, как CMD59, но вот её подробное описание не удосужились привести... Кто что знает?
|
|
|
|
|
Jul 24 2007, 18:12
|
Участник

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

|
Цитата(oll @ Jul 24 2007, 20:29)  Так как время между посылками в звуковой цап или шим при оцифровке звука 16кГц составляет 65мкС - Вы спокойно успеете прочитать два CRC. Правда, если Вы используете 51 кристалл надо все просчитать - может понадобится снизить частоту оцифровки до 8 кГц (125 мкС). Не всё так просто. Я на своём AT89C2051 решил вытянуть все 22 кГц! И это получилось. Почти  ) Звук проигрывается, но со щелчками. Я встал ослом на выход ЦАПа и узнал характер этих щелчков - это те самые 2 байта CRC. Так вот, для проигрывания 22 кГц, 8 бит мне пришлось поставить кварц 20 МГц (у 2051 на один такт уходит 12 циклов кварца, в итоге имеем реальную частоту 1,67 МГц, если бы это был AVR). И со всеми этими условиями программка работает впритык, т.е не всунешь туда ещё пару строк. Даже для этого мне пришлось ужать цикл воспроизведения 1 байта хитрым способом. ЦАП у меня 12 бит, поставил то, что было под рукой. Реально значат только старшие 8 бит, остальные 4 нули. У DAC7513 цикл состоит из 16 бит: x-x-0-0-bit12-bit11-.....-bit0. В рамках этой схемы всё получилось впритык, и эти 2 байта CRC всё портят. Сегодня попробую их просто не читать (16 clock на карточке и всё), но тогда появится ступенька в фонограмме. Но это лучше, чем щелчки. Отпишусь о результатах.
|
|
|
|
|
Jul 24 2007, 18:42
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 10-10-05
Пользователь №: 9 463

|
Цитата(Angelborn @ Jul 25 2007, 00:12)  Не всё так просто. Я на своём AT89C2051 решил вытянуть все 22 кГц! И это получилось. Почти  ) Звук проигрывается, но со щелчками. Я встал ослом на выход ЦАПа и узнал характер этих щелчков - это те самые 2 байта CRC. Так вот, для проигрывания 22 кГц, 8 бит мне пришлось поставить кварц 20 МГц (у 2051 на один такт уходит 12 циклов кварца, в итоге имеем реальную частоту 1,67 МГц, если бы это был AVR). И со всеми этими условиями программка работает впритык, т.е не всунешь туда ещё пару строк. Даже для этого мне пришлось ужать цикл воспроизведения 1 байта хитрым способом. ЦАП у меня 12 бит, поставил то, что было под рукой. Реально значат только старшие 8 бит, остальные 4 нули. У DAC7513 цикл состоит из 16 бит: x-x-0-0-bit12-bit11-.....-bit0. В рамках этой схемы всё получилось впритык, и эти 2 байта CRC всё портят. Сегодня попробую их просто не читать (16 clock на карточке и всё), но тогда появится ступенька в фонограмме. Но это лучше, чем щелчки. Отпишусь о результатах. Честно говоря я бы в Вашей задаче заменил AT89C2051 на Tiny2313 - по ногам совпадает плюсы: -питание 3В - малое потребление в слипе -внутренний генератор 8 мГц -не нужен внешний ЦАП - звук можно вывести на 8-ми битный шим (их там четыре) + 1резистор и конденсатор - звук получается хороший (проверено) - и лично для меня большой плюс - любимая среда разработки - Алгоритм билдер (до 2К компилирует не зарегистрированная версия) не сочтите за рекламу АВРов - 51 серию тоже регулярно пользую
|
|
|
|
|
Jul 24 2007, 18:58
|
Участник

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

|
Цитата(oll @ Jul 24 2007, 21:42)  Честно говоря я бы в Вашей задаче заменил AT89C2051 на Tiny2313 - по ногам совпадает плюсы: -питание 3В - малое потребление в слипе -внутренний генератор 8 мГц -не нужен внешний ЦАП - звук можно вывести на 8-ми битный шим (их там четыре) + 1резистор и конденсатор - звук получается хороший (проверено) - и лично для меня большой плюс - любимая среда разработки - Алгоритм билдер (до 2К компилирует не зарегистрированная версия) не сочтите за рекламу АВРов - 51 серию тоже регулярно пользую На тини это чудо техники сделать - раз плюнуть! Там быстродействие всё покроет и все дыры залатает. Весь смысл в том, чтобы сделать это на AT89C2051. Проект не коммерческий, строится исключительно на энтузиазме. Поймите меня правильно.
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|