gnomik_ 0 22 декабря, 2009 Опубликовано 22 декабря, 2009 · Жалоба В ветке "для начинающих" выкладывал исходники. http://electronix.ru/forum/index.php?showtopic=70358 Спасибо. Вот еще бы совет по подключению к MK для реализации SD-mode... :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KAlex 0 23 декабря, 2009 Опубликовано 23 декабря, 2009 · Жалоба Как в ДШ нарисовано, так и подключал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gnomik_ 0 24 декабря, 2009 Опубликовано 24 декабря, 2009 · Жалоба Как в ДШ нарисовано, так и подключал. Ваш МК был 3-х вольтовый? У меня 5-ти вольтовый. Интересно согласование. :rolleyes: Может у меня ДШ не того...Может я чего не доглядел. Да и английский не русский? Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 25 24 декабря, 2009 Опубликовано 24 декабря, 2009 · Жалоба Ваш МК был 3-х вольтовый? У меня 5-ти вольтовый. Интересно согласование. :rolleyes: Стр. 99, Рис. 4-1. Как-то, так.. :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gnomik_ 0 28 декабря, 2009 Опубликовано 28 декабря, 2009 · Жалоба Стр. 99, Рис. 4-1. Как-то, так.. :rolleyes: Спасибо за ссылку. Жаль, что там только MMC и SPI. :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gnomik_ 0 2 января, 2010 Опубликовано 2 января, 2010 · Жалоба Выложите пожалуйста, кому не жалко, значение посчитанного CRC16 (полином для SD), для 512 байт заполненных одним значением, например 0хDD или 0х0C или любыми другими значениями. Желательно несколько значений. Хочу функцию проверить. Спасибо. :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 2 января, 2010 Опубликовано 2 января, 2010 · Жалоба Считать лень. Можете просто сравнить с этой функцией: 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; } Оказывается, я ее уже выкладывал в этой теме. Хоть бы поискали. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gnomik_ 0 3 января, 2010 Опубликовано 3 января, 2010 · Жалоба Считать лень. Можете просто сравнить с этой функцией: .............. Оказывается, я ее уже выкладывал в этой теме. Хоть бы поискали. Моя реализация отличается от вашей. Цели не было брать чужой (правильный) код. Хотел только узнать готовые значения для проверки своих реализаций функции расчета CRC16(SD). Для CRC7 добрые люди выкладывали, а вот для CRC16(SD) че-то не нашел. Спасибо. :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 3 января, 2010 Опубликовано 3 января, 2010 · Жалоба Подход какой-то странный - чем искать кем-то зачем-то подсчитанные значения, просто берете любую чужую функцию, и считаете ей значение для чего угодно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KAlex 0 3 января, 2010 Опубликовано 3 января, 2010 · Жалоба В свое время тоже намучился с 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; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 3 января, 2010 Опубликовано 3 января, 2010 · Жалоба Выбирая между табличным и вычислителным методами пришел к компромиссу. Как мне кажется оптимальным будет вычисление таблицы в ОЗУ и дальнейшая работа с ней. Экономия, допустим, Flash и повышение быстродействия (не всегда) путем засирания драгоценной для микроконтроллеров RAM таблицей это компромисс? Между чем и чем? Пример, именно компромисса между полным табличным и вычислительным методом приводил aaarrr. Причем с привязкой к конкретному вопросу, а не просто "CRC". Компромиссным вариантом в некоторых случаях может быть и развертывание побитного цикла. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gnomik_ 0 3 января, 2010 Опубликовано 3 января, 2010 · Жалоба ...... просто берете любую чужую функцию, и считаете ей значение для чего угодно. Зачем чужую? Своя есть. Хочу проверить как работает. Ведь чужих вариантов тоже не один. :rolleyes: В ДШ есть пример: 512 по 0хFF, хотел проверить другие наборы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KAlex 0 5 января, 2010 Опубликовано 5 января, 2010 · Жалоба Экономия, допустим, Flash и повышение быстродействия (не всегда) путем засирания драгоценной для микроконтроллеров RAM таблицей это компромисс? А я и не претендовал на истину в последней инстанции. Это для моей конкретной задачи. RAMа много, ROMа мало. Вот и выкручиваюсь как могу. И код выкладывал не для того, чтобы похвалиться. А для того, что может быть кому пригодится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gnomik_ 0 5 января, 2010 Опубликовано 5 января, 2010 · Жалоба А я и не претендовал на истину в последней инстанции. Это для моей конкретной задачи. RAMа много, ROMа мало. Вот и выкручиваюсь как могу. И код выкладывал не для того, чтобы похвалиться. А для того, что может быть кому пригодится. Я думаю вы сделали все правильно. Спасибо вам за ваш код. Он пригодится. Помогать сложно. Критиковать просто... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gnomik_ 0 9 января, 2010 Опубликовано 9 января, 2010 · Жалоба При инициализации в 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 - что тоже странно) Чего-то не понимаю, а чего не понимаю, еще не понимаю Может у кого было подобное, помогите советом, подскажите чего делать.? :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться