Данные CDROM используют 3-й уровень обнаружения ошибок с использованием Рида-Соломона и EDC с использованием 32-битного полинома CRC.

Стандарт ECMA 130 определяет полином EDC CRC следующим образом ( стр.16, 14.3):

P(X) = (X^16 + x^15 + x^2 + 1).(x^16 + x^2 + x + 1)

А также

Первым используется младший бит байта данных.

Обычно перевод полинома в форму целочисленного значения довольно прост. Используя математический модуль, расширенный многочлен должен быть P(X) = x^32 + x^31 + x^18 + x^17 + x^16 + x^15 + x^4 + x^3 + x^2 + x + 1, таким образом, значение будет 0x8007801F

Последнее предложение означает, что многочлен перевернут (если я правильно понял).

Но мне пока не удалось получить правильную стоимость. В исходном коде Cdrtools используется значение полинома 0x08001801. Может кто-нибудь объяснить, как они нашли эту ценность?

0
Proger_Cbsk 18 Апр 2020 в 15:58

1 ответ

Лучший ответ

Размещение ответа:

Во-первых, я ошибся в алгебре по модулю 2, использованной для раскрытия полинома. Развернутая форма без модуля:

P(X) = x^32 + x^31 + 2x^18 + 2x^17 + 3x^16 + x^15 + x^4 + x^3 + 2x^2 + x + 1

Любой четный коэффициент равен 0, а нечетные равны 1 в алгебре по модулю 2, поэтому окончательный развернутый многочлен равен:

P(X) = x^32 + x^31 + x^16 + x^15 + x^4 + x^3 + x + 1

Итак, фактическое значение равно 0x8001801B

Во-вторых, я неправильно прочитал исходный код cdrtools, их значение тоже 0x8001801B.

0
Proger_Cbsk 6 Май 2020 в 08:13