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

 
 
> xmega64a3u CRC-32, Работает, но выдаёт чушь.
ffs2001
сообщение Dec 3 2014, 20:04
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 3-12-14
Пользователь №: 83 971



Господа, помогите советом:

хочу считать CRC-32 на указанном МК. Аппаратный модуль имеется.
Код использовал родной атмелевский отсюда и упрощённый вариант:

Код
CRC_CTRL |= CRC_CRC32_bm;
CRC.CTRL |= CRC_SOURCE_IO_gc;
        
for (n = 0; n < 32; n++){            
    
    CRC.DATAIN = test[n]; // send data
}
        
CRC.STATUS |= CRC_BUSY_bm; // finish
while (CRC_STATUS & CRC_BUSY_bm == CRC_BUSY_bm);

itoa(CRC.CHECKSUM3,str);
puts_usf0(str);
//и так далее


Сам модуль работает, но выдаёт неверные данные.
Проверял вот этим калькулятором.
Полиномы совпадают, в даташите есть описание. В эррате ничего.
Тестовый массив: uint8_t[32] = {0xFF}

ЧЯДНТ?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ffs2001
сообщение Dec 4 2014, 12:32
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 3-12-14
Пользователь №: 83 971



Так, проблема, похоже, не в контроллере.
В этом калькуляторе получается то же значение, что выдаёт мой контроллер. Проблема в том, что в него я скопировал полином из этого калькулятора, где получается другое значение (с этим полиномом). Это, как говорится, какое-то фуфло; но бедная иксмега не при чём.
Когда разберусь с полиномами, отпишу, в чём соль.

Цитата(_Артём_ @ Dec 4 2014, 15:18) *
Драйвер неправильный (или может его исправили?).


Мда, печально.
Расскажите подробнее, если не затруднит.


Цитата(_Артём_ @ Dec 4 2014, 15:18) *
В драйвере не было вроде такой строки (функция Crc32):
Код
CRC.STATUS=1<<CRC_BUSY_bp;

С ДМА как ни странно работало без проблем.


Да, уже обрабатывал этот момент; это единственная ошибка в драйвере?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Dec 4 2014, 12:43
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(ffs2001 @ Dec 4 2014, 15:32) *
Мда, печально.
Расскажите подробнее, если не затруднит.

Рассказывать-то и нечего: есть стандартная функция расчёта CRC
Код
/*
  Name  : CRC-32
  Poly  : 0x04C11DB7    x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11
                       + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1
  Init  : 0xFFFFFFFF
  Revert: true
  XorOut: 0xFFFFFFFF
  Check : 0xCBF43926 ("123456789")
  MaxLen: 268 435 455 байт (2 147 483 647 бит) - обнаружение
   одинарных, двойных, пакетных и всех нечетных ошибок
*/
uint_least32_t Crc32Soft(uint8_t *buf, size_t len, uint32_t init_value)
{
    uint_least32_t crc_table[256];
    uint_least32_t crc; int i, j;

    for (i = 0; i < 256; i++)
    {
        crc = i;
        for (j = 0; j < 8; j++)
            crc = crc & 1 ? (crc >> 1) ^ 0xEDB88320UL : crc >> 1;

        crc_table[i] = crc;
    };

    crc = init_value;

    while (len--)
        crc = crc_table[(crc ^ *buf++) & 0xFF] ^ (crc >> 8);

    return crc ^ 0xFFFFFFFFUL;
}

Результат CRC32 который выдаёт модуль xmega не совпадает с ним для CRC32.


Цитата(ffs2001 @ Dec 4 2014, 15:32) *
это единственная ошибка в драйвере?

Я драйвер подробно не рассматривал, смотрел пример который шёл вместе со AtmelStudio. И в примере результат неправильный получается.

Цитата(ffs2001 @ Dec 4 2014, 15:32) *
драйвере?

Да в общем-то тут и драйвер-то не нужен - там весь модуль 3 регистра. Самому проще написать.
Go to the top of the page
 
+Quote Post
ffs2001
сообщение Dec 4 2014, 13:53
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 3-12-14
Пользователь №: 83 971



Цитата(_Артём_ @ Dec 4 2014, 15:43) *
Рассказывать-то и нечего: есть стандартная функция расчёта CRC


Благодарю!


В общем, CRC-модуль, похоже, рабочий. Теперь (немного в сторону от темы) ситуация получилась такая:

модуль xmega и вот этот калькулятор выдают одинаковое значение;

библиотека CRC-32 для VS (PC) и вот этот калькулятор тоже выдают одинаковое значение, но другое!

Полином везде один и тот же. Видимо, под конец они как-то хитро XOR-ятся или ещё что...
Тестовое значение (hex) 940C.

Буду очень рад, если кто-нибудь объяснит, как так происходит.

Go to the top of the page
 
+Quote Post
_Артём_
сообщение Dec 4 2014, 14:11
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(ffs2001 @ Dec 4 2014, 16:53) *
Полином везде один и тот же.

Возможно они инициализируют crc перед началом подсчёта нулями, а вы единицами. Или наоборот.
Попробуйте посчитать CRC по функции из сообщения 6.
Код
    uint8_t Test10[10]={1,2,3,4,5,6,7,8,9,10};
    volatile uint32_t soft_crc[2];
    soft_crc[0]=Crc32Soft(Test, sizeof(Test), 0xFFFFFFFFUL);
    soft_crc[1]=Crc32Soft(Test, sizeof(Test), 0);

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ffs2001   xmega64a3u CRC-32   Dec 3 2014, 20:04
- - Xenia   Цитата(ffs2001 @ Dec 3 2014, 23:04) [code...   Dec 3 2014, 20:34
|- - ffs2001   Цитата(Xenia @ Dec 3 2014, 23:34) Возможн...   Dec 4 2014, 11:55
|- - _Артём_   Цитата(ffs2001 @ Dec 4 2014, 14:55) Да, в...   Dec 4 2014, 12:18
- - ffs2001   Результаты работы приведённого кода идентичны резу...   Dec 4 2014, 15:24
|- - _Артём_   Цитата(ffs2001 @ Dec 4 2014, 18:24) Хочу ...   Dec 4 2014, 15:35
|- - ffs2001   Цитата(_Артём_ @ Dec 4 2014, 18:35) Тогда...   Dec 4 2014, 16:58
|- - _Артём_   Цитата(ffs2001 @ Dec 4 2014, 19:58) Так б...   Dec 4 2014, 18:24
- - ffs2001   Проверил на двух 64ых, результаты разные для hard ...   Dec 5 2014, 09:46
|- - _Артём_   Цитата(ffs2001 @ Dec 5 2014, 12:46) резул...   Dec 5 2014, 19:32
- - ffs2001   Проект для CVAVR 3.1 . Скомпилированные ROM и HEX ...   Dec 8 2014, 10:12
|- - _Артём_   Цитата(ffs2001 @ Dec 8 2014, 13:12) Проек...   Dec 8 2014, 13:06
|- - ffs2001   Цитата(_Артём_ @ Dec 8 2014, 16:06) P.S. ...   Dec 8 2014, 16:46
- - Duhas   1<<CRC_CRC32_bp должно быть эквивалентно CRC...   Dec 8 2014, 15:28
|- - _Артём_   Цитата(Duhas @ Dec 8 2014, 18:28) 1<...   Dec 8 2014, 15:44
- - Genadi Zawidowski   Как я помню, в языке "C" у тернарной опе...   Dec 8 2014, 21:51
|- - _Артём_   Цитата(Genadi Zawidowski @ Dec 9 2014, 00...   Dec 9 2014, 13:28
- - ffs2001   Артём, кстати, а каким эмулятором контроллера по...   Dec 9 2014, 19:54
|- - _Артём_   Цитата(ffs2001 @ Dec 9 2014, 22:54) кстат...   Dec 9 2014, 20:11
- - Genadi Zawidowski   Ваш вариант КодCRC.CTRL=0 | init_zero ? (CRC...   Dec 10 2014, 08:43


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 11:34
Рейтинг@Mail.ru


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