Переделка DDR3 памяти в DDR3L с правкой CRC контрольной суммы
В массе своей DDR3L (low-voltage 1.35V) очередной развод производителей, расширяющих ассортимент для увеличения прибыли. Чипы памяти обычно идентичны и разница на уровне прошивки SPD. Перейдем к практике.
Считываем SPD памяти.
Помимо изменения самого байта с 00h на 02h по адресу 06h, необходимо соответственно пересчитывать изменившуюся контрольную сумму иначе, например на куче свеженьких Ленов, переделанная память работать не будет (специально тестировал одну и ту же планку памяти с исправленной CRC и нет), но обычно работает на всяких асусах и пр.
Самый простой способ это использовать специальную программу для работы с SPD, но spdtool уже давно безнадежно устарел, а Thaiphoon Burner конечно очень крут, но платный (в бесплатной версии как водится все нужные фичи заблокированы) и для наших простых задач избыточен, хотя кому интересно каждый байт прошивки описан и позволяет понимать как и что устроено. Есть еще китайский spd doctor, но опять же полноценно он вроде работает в привязке к аппаратному адаптеру.
Поэтому опишу как CRC пересчитать вручную ) Сама CRC хранится в 126 и 127 байтах прошивки (7Eh-7Fh).
1. В 7м бите нулевого байта прошивки указывается: CRC рассчитывается для 0-116 (чаще всего) или от 0-125 байт. Чтобы не напрягать голову лишний раз просто смотрим на нулевой байт - обычно его значение 92h, значит CRC рассчитывается по первому варианту 0-116
2. Берем какой-нибудь онлайн калькулятор типа этого, не забываем поставить галочку inpute type в положение hex, копипастим туда в строку 0-116 байты (по 74h), жмем calculate CRC и смотрим значение в строке CRC-CCITT (XModem), не забываем про little-endian - то есть получившиеся байты CRC забить в прошивку (по адресу контрольной суммы) в обратном порядке
Или все это наша программа выполнит автоматически
(c)Doc