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

 
 
> SD карта не просыпается
svchost
сообщение Jun 1 2009, 11:42
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 31-05-09
Пользователь №: 49 779



Добрый день!
Есть связка mega32+SD карта 128M (питание 3,3в)+ программная реализация SPI.
Воспроизводит WAV файлы 8бит 11025Гц.
Установил карту 1G. Не просыпается по CMD1 (в ответ получаю 01).
Подавал связку CMD55 (в ответ получаю 01)+CMD41, CMD8 на обе команды ответ 05 (не существующая команда).
Все команды подаю с правильным CRC. В кардридере все работает. Купил флешку на 2G тоже самое.
Может кто сталкивался, подскажите пожалуйста в чем трабл?

Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sonycman
сообщение Jun 4 2009, 10:57
Сообщение #2


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



А я в сети нашёл такой код:
Код
u8    CRC7(u8* chr, int cnt)
{
    int i,a;
    u8 crc = 0, data;

    for (a=0; a < cnt; a++)
    {
        data=chr[a];
        for (i=0; i < 8; i++)
        {
            crc <<= 1;
            if ((data ^ crc) & 0x80) crc ^= 0x09;
            data <<= 1;
        }
    }
    return    crc;
}

Интересно, нельзя никак избежать побитного цикла (i), чтобы ускорить рассчёт?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 4 2009, 11:14
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sonycman @ Jun 4 2009, 14:57) *
Интересно, нельзя никак избежать побитного цикла (i), чтобы ускорить рассчёт?

Можно, конечно. Хотя ускорять рассчет 5 байт большого смысла нет.
Вот для данных - это другое дело.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jun 4 2009, 11:46
Сообщение #4


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(aaarrr @ Jun 4 2009, 15:14) *
Можно, конечно. Хотя ускорять рассчет 5 байт большого смысла нет.

Это понятно, но всё равно интересно - как?
В сети нигде не нашёл работающего примера без битового цикла...

Для данных это да. Но для SPI сумма не нужна (странно, конечно, но неужели надёжность SPI близка к 100%, чтобы в контрольной сумме отпала надобность?), а SDIO контроллеры будут считать её аппаратно...

ЗЫ: вот ваша процедура на Си, она пооптимальнее, чем приведённая мной:
Код
u8    CRC7(u8* chr, int cnt)
{
    int i,a;
    u8 crc = 0;

    for (a=0; a < cnt; a++)
    {
        crc ^= chr[a];
        for (i=0; i < 8; i++)
        {
            if (crc & 0x80)
            {
                crc <<= 1;
                crc ^= 0x12;
            }
            else crc <<= 1;
        }
    }
    crc |= 1;
    return    crc;
}
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 4 2009, 12:00
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sonycman @ Jun 4 2009, 15:46) *
Это понятно, но всё равно интересно - как?

Табличкой, например.

Цитата(sonycman @ Jun 4 2009, 15:46) *
Для данных это да. Но для SPI сумма не нужна (странно, конечно, но неужели надёжность SPI близка к 100%, чтобы в контрольной сумме отпала надобность?), а SDIO контроллеры будут считать её аппаратно...

Для SPI ее можно не включать, но это не значит, что она не нужна. Я, например, включаю и использую.

Цитата(sonycman @ Jun 4 2009, 15:46) *
ЗЫ: вот ваша процедура на Си, она пооптимальнее, чем приведённая мной:

Спасибо, конечно, а я-то специально на асм переводил smile.gif

Если интересно, то вот вариант для данных:
Код
const u_short sd_crc16_table_a[0x10] =
{
    0x0000, 0x1231, 0x2462, 0x3653,
    0x48c4, 0x5af5, 0x6ca6, 0x7e97,
    0x9188, 0x83b9, 0xb5ea, 0xa7db,
    0xd94c, 0xcb7d, 0xfd2e, 0xef1f
};

const u_short sd_crc16_table_b[0x10] =
{
    0x0000, 0x1021, 0x2042, 0x3063,
    0x4084, 0x50a5, 0x60c6, 0x70e7,
    0x8108, 0x9129, 0xa14a, 0xb16b,
    0xc18c, 0xd1ad, 0xe1ce, 0xf1ef
};

u_int sd_crc16(u_char *buff, u_int len)
{
    u_char data;
    u_short crc = 0;

    while(len--)
    {
        data = *buff++ ^ (crc >> 0x08);
        crc = (sd_crc16_table_a[(data & 0xf0) >> 4] ^ sd_crc16_table_b[data & 0x0f]) ^ (crc << 8);
    }
    return crc;
}
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jun 4 2009, 12:26
Сообщение #6


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(aaarrr @ Jun 4 2009, 16:00) *
Табличкой, например.

Да, это вариант. Но самое прикольное - это хитрые варианты, когда без таблиц и без цилов, быстрое вычисление всего лишь несколькими командами.
Наверное, такое возможно не всегда...

Цитата(aaarrr @ Jun 4 2009, 16:00) *
Если интересно, то вот вариант для данных:

Спасибо, красивая реализация, небольшие таблички и минимум вычислений smile.gif
Go to the top of the page
 
+Quote Post
ivstech
сообщение Jun 4 2009, 18:05
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 204
Регистрация: 5-01-06
Пользователь №: 12 860



Цитата(sonycman @ Jun 4 2009, 18:26) *
<br />Да, это вариант. Но самое прикольное - это хитрые варианты, когда без таблиц и без цилов

Когда флэша нехватает, я использую такой код
Код
; in/out YH аккумулятор
; in R18 следующий байт
CRC7Update:
   eor YH, R18
  ; Левый полубайт
   mov R19, YH
   andi R19, 0xF0
   swap R19
   eor YH, R19
   swap R19
   add R19, R19
   brcc CRC7Skip
   ldi YL, 0x01
   eor YH, YL
CRC7Skip:
   mov YL, R19
  ; Правый полубайт
   mov R19, YH
   andi R19, 0x0F
   swap R19
   eor YL, R19
   swap R19
   add R19, R19
   eor YL, R19
   mov YH, YL
   ret

и
Код
; IN:  R4, R5 - аккумулятор CRC
;      R18 - значение
; OUT: R4, R5

; По модулю 0x11021
CRC16Update:
   push R18
   push R19
   eor R4, R18
  ; Левый полубайт
   mov R19, R4
   andi R19, 0xF0
   mov R18, R19
   swap R19
   eor R4, R19
   add R19, R19
   eor R5, R19
  ; Правый полубайт
   mov R19, R4
   andi R19, 0x0F
   eor R18, R19
   swap R19
   eor R5, R19
   add R19, R19
   brcc CRC16Skip
   clr R4
   inc R4
   eor R5, R4
CRC16Skip:
   eor R18, R19
   mov R4, R5
   mov R5, R18
   pop R19
   pop R18
   ret
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- svchost   SD карта не просыпается   Jun 1 2009, 11:42
- - aaarrr   Cначала нужно дать минимум 74 клока, затем CMD0, з...   Jun 1 2009, 11:56
|- - svchost   Цитата(aaarrr @ Jun 1 2009, 15:56) Cначал...   Jun 1 2009, 13:01
|- - etoja   Цитата(svchost @ Jun 1 2009, 17:01) все э...   Jun 1 2009, 13:24
|- - aaarrr   Цитата(svchost @ Jun 1 2009, 17:01) все э...   Jun 1 2009, 13:31
|- - svchost   Цитата(aaarrr @ Jun 1 2009, 17:31) Значит...   Jun 1 2009, 13:39
- - aaarrr   CMD1 или ACMD41? CMD1 использовать не рекомендуетс...   Jun 1 2009, 13:44
|- - svchost   Цитата(aaarrr @ Jun 1 2009, 17:44) CMD1 и...   Jun 1 2009, 13:56
|- - aaarrr   Цитата(svchost @ Jun 1 2009, 17:56) ACMD4...   Jun 1 2009, 18:39
|- - svchost   Цитата(aaarrr @ Jun 1 2009, 22:39) Так, а...   Jun 1 2009, 20:03
- - woroba   Цитата(svchost @ Jun 1 2009, 17:42) Добры...   Jun 1 2009, 13:55
- - aaarrr   Для инициализации SD всегда нужно использовать ACM...   Jun 1 2009, 20:16
|- - svchost   Цитата(aaarrr @ Jun 2 2009, 00:16) Для ин...   Jun 1 2009, 20:29
|- - aaarrr   Цитата(svchost @ Jun 2 2009, 00:29) Сколь...   Jun 1 2009, 20:51
- - sonycman   Ncr может быть от 0 до 8 байт. Что характерно, де...   Jun 2 2009, 04:02
|- - aaarrr   Цитата(sonycman @ Jun 2 2009, 08:02) Ncr ...   Jun 2 2009, 07:33
- - adc   Цитата(svchost @ Jun 2 2009, 00:03) ... П...   Jun 2 2009, 06:19
|- - svchost   Цитата(adc @ Jun 2 2009, 10:19) Было бы и...   Jun 3 2009, 20:08
- - adc   Цитата(svchost @ Jun 4 2009, 00:08) Пожал...   Jun 4 2009, 06:57
|- - aaarrr   Цитата(adc @ Jun 4 2009, 10:57) Несколько...   Jun 4 2009, 07:25
|- - svchost   Цитата(aaarrr @ Jun 4 2009, 11:25) Да уж,...   Jun 4 2009, 15:45
|- - aaarrr   Цитата(svchost @ Jun 4 2009, 19:45) Подпр...   Jun 4 2009, 17:52
- - adc   to ivstech and aaarrr: странно но результат вычисл...   Jun 5 2009, 06:38
|- - aaarrr   Цитата(adc @ Jun 5 2009, 10:38) Зачем она...   Jun 5 2009, 07:05
- - svchost   Контрольный байт для отправки SD карте получается ...   Jun 5 2009, 11:01


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 19:48
Рейтинг@Mail.ru


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