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

 
 
> 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, 15:24
Сообщение #2


Участник
*

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



Результаты работы приведённого кода идентичны результатам библиотеки для PC (собственно, и код идентичен).

Крайне смущает совпадение результатов из xmega'вского генератора с другим калькулятором.
Хочу использовать hardware генератор, т.к. нужно считать CRC app-table из бутлодера.

Буду копать дальше.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Dec 4 2014, 15:35
Сообщение #3


Гуру
******

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



Цитата(ffs2001 @ Dec 4 2014, 18:24) *
Хочу использовать hardware генератор, т.к. нужно считать CRC app-table из бутлодера.

Тогда лучше использовать подсчёт CRC через команду NVM-контроллера Flash range CRC - оно само подсчитает.
Go to the top of the page
 
+Quote Post
ffs2001
сообщение Dec 4 2014, 16:58
Сообщение #4


Участник
*

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



Цитата(_Артём_ @ Dec 4 2014, 18:35) *
Тогда лучше использовать подсчёт CRC через команду NVM-контроллера Flash range CRC - оно само подсчитает.


Так будет использоваться тот же самый хардварный генератор. А он выдаёт не то.

Совпадение калькулятора и генератора, похоже, было случайным. Совпадают только значения, генерируемые из массива [32] = {0xFF}

Делаю вывод, что хардварный генератор нерабочий.
Странно, что этого нет в эррате.

При возможности проверю на другом контроллере, отпишусь.

Ещё интересный нюанс относительно приведённого в сообщении 6 кода:

Код
crc = crc & 1 ? (crc >> 1) ^ 0xEDB88320UL : crc >> 1;


Visual studio ругнулась тут на невозможность привести int к bool, и я ничтоже сумняшеся привёл код к виду

Код
for (j = 0; j < 8; j++)
                {
                    if ((crc & 1) == 1)
                    {
                        crc = (crc >> 1) ^ 0xedb88320u;
                    }
                    else
                    {
                        crc = (crc >>
                };

                crc_table[i] = crc;


тем более что так это реализовано в библиотеке, которую я использовал для PC.


Компилятор для Атмеги (работаю в CVAVR) на эту строку не ругнулся.
Но если не привести код к тому же виду, результат получается РАЗНЫЙ.
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, 12:32
|- - _Артём_   Цитата(ffs2001 @ Dec 4 2014, 15:32) Мда, ...   Dec 4 2014, 12:43
|- - ffs2001   Цитата(_Артём_ @ Dec 4 2014, 15:43) Расск...   Dec 4 2014, 13:53
|- - _Артём_   Цитата(ffs2001 @ Dec 4 2014, 16:53) Полин...   Dec 4 2014, 14:11
|- - _Артём_   Цитата(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 Текстовая версия Сейчас: 31st July 2025 - 03:49
Рейтинг@Mail.ru


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