Перейти к содержанию
    

SD Card - програмная реализация интерфейса

В ветке "для начинающих" выкладывал исходники.

http://electronix.ru/forum/index.php?showtopic=70358

 

Спасибо.

 

Вот еще бы совет по подключению к MK для реализации SD-mode... :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как в ДШ нарисовано, так и подключал.

 

Ваш МК был 3-х вольтовый? У меня 5-ти вольтовый. Интересно согласование. :rolleyes:

Может у меня ДШ не того...Может я чего не доглядел. Да и английский не русский?

 

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ваш МК был 3-х вольтовый? У меня 5-ти вольтовый. Интересно согласование. :rolleyes:

Стр. 99, Рис. 4-1. Как-то, так.. :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Стр. 99, Рис. 4-1. Как-то, так.. :rolleyes:

 

Спасибо за ссылку. Жаль, что там только MMC и SPI. :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Выложите пожалуйста, кому не жалко, значение посчитанного CRC16 (полином для SD), для 512 байт заполненных одним значением, например 0хDD или 0х0C или любыми другими значениями. Желательно несколько значений. Хочу функцию проверить.

 

Спасибо. :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Считать лень. Можете просто сравнить с этой функцией:

const unsigned short sd_crc16_table_a[16] =
{
0x0000, 0x1231, 0x2462, 0x3653,
0x48c4, 0x5af5, 0x6ca6, 0x7e97,
0x9188, 0x83b9, 0xb5ea, 0xa7db,
0xd94c, 0xcb7d, 0xfd2e, 0xef1f
};

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

unsigned short sd_crc16(unsigned char *buff, unsigned int len)
{
   unsigned char data;
   unsigned short crc = 0;

   while(len--)
   {
       data = *buff++ ^ (crc >> 8);
       crc = (sd_crc16_table_a[(data & 0xf0) >> 4] ^ sd_crc16_table_b[data & 0x0f]) ^ (crc << 8);
   }
   return crc;
}

 

Оказывается, я ее уже выкладывал в этой теме. Хоть бы поискали.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Считать лень. Можете просто сравнить с этой функцией:

..............

Оказывается, я ее уже выкладывал в этой теме. Хоть бы поискали.

 

Моя реализация отличается от вашей. Цели не было брать чужой (правильный) код.

 

Хотел только узнать готовые значения для проверки своих реализаций функции расчета CRC16(SD).

 

Для CRC7 добрые люди выкладывали, а вот для CRC16(SD) че-то не нашел.

 

Спасибо. :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подход какой-то странный - чем искать кем-то зачем-то подсчитанные значения, просто берете любую чужую функцию, и считаете ей значение для чего угодно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В свое время тоже намучился с CRC.

Выбирая между табличным и вычислителным методами пришел к компромиссу.

Как мне кажется оптимальным будет вычисление таблицы в ОЗУ и дальнейшая работа с ней.

И код компактный, и работает быстро.

#define CRC16_POLYNOMIAL 0x1021
static unsigned short crc16_syndrome_table[256];

void gen_crc16_syndrome_table(void) { 
  unsigned int c; 
  unsigned int n; 
  unsigned char k; 
  unsigned int poly; // polynomial exclusive-or pattern
   
  poly = CRC16_POLYNOMIAL; 
  for (n=0; n<256; n++) { 
    c = n << 8; 
    for(k=0; k<8; k++) 
      c = c & (0x8000) ? poly ^ (c << 1) : (c << 1); 
    crc16_syndrome_table[n] = c; 
  } 
} 

unsigned short crc16(unsigned char * pcBlock, unsigned short len) {
  unsigned short crc = 0xFFFF;
  while (len--) crc = (crc << 8) ^ crc16_syndrome_table[(crc >> 8) ^ *pcBlock++];
  return crc;
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Выбирая между табличным и вычислителным методами пришел к компромиссу.

Как мне кажется оптимальным будет вычисление таблицы в ОЗУ и дальнейшая работа с ней.

Экономия, допустим, Flash и повышение быстродействия (не всегда) путем засирания драгоценной для микроконтроллеров RAM таблицей это компромисс? Между чем и чем? Пример, именно компромисса между полным табличным и вычислительным методом приводил aaarrr. Причем с привязкой к конкретному вопросу, а не просто "CRC". Компромиссным вариантом в некоторых случаях может быть и развертывание побитного цикла.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...... просто берете любую чужую функцию, и считаете ей значение для чего угодно.

 

Зачем чужую? Своя есть. Хочу проверить как работает.

Ведь чужих вариантов тоже не один. :rolleyes:

 

В ДШ есть пример: 512 по 0хFF, хотел проверить другие наборы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Экономия, допустим, Flash и повышение быстродействия (не всегда) путем засирания драгоценной для микроконтроллеров RAM таблицей это компромисс?

А я и не претендовал на истину в последней инстанции. :biggrin:

Это для моей конкретной задачи. RAMа много, ROMа мало. Вот и выкручиваюсь как могу.

И код выкладывал не для того, чтобы похвалиться. А для того, что может быть кому пригодится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А я и не претендовал на истину в последней инстанции. :biggrin:

Это для моей конкретной задачи. RAMа много, ROMа мало. Вот и выкручиваюсь как могу.

И код выкладывал не для того, чтобы похвалиться. А для того, что может быть кому пригодится.

 

Я думаю вы сделали все правильно. Спасибо вам за ваш код.

Он пригодится.

 

Помогать сложно. Критиковать просто...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При инициализации в SD-mode карта отвечает на команды, но ответы странные:

 

на CMD8 отвечает 00 00 00 02 00 FF

на CMD55 отвечает 2C 00 00 00 00 7F

на ACMD41 отвечает 3F 81 FE 00 03 FF

на CMD2 выдает 14 байт, а не положенные 17(если конечно хвост не сплошные FF - что тоже странно)

 

Чего-то не понимаю, а чего не понимаю, еще не понимаю :biggrin:

 

Может у кого было подобное, помогите советом, подскажите чего делать.? :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...