Project

General

Profile

Feature #1233

Updated by Izerg over 4 years ago

 
 h3. *DDR DIMM SPD адаптер для Raspberry Pi* 

 Сегодня практически каждый модуль DDR памяти имеет в совоем составе небольшую I2C EEPROM память для храненияинформации о производителе, спецификации, конфигурации модуля. Наличие конфигурационной информации позволяет компьютеру определять тип памяти,настраивать интерфейс памяти на корректные значения скорости и напряжения в соответствии со спецификацией модуля памяти. Такой механизм работы основан на стандарте -JEDEC "Serial presence detection specification (SPD)"- (+Доступен для загрузки+). 
 Когда нужно изменить информацию SPD используют программные утилиты для модификаций параметров памяти в составе системы. Данные утилиты очень редко дступны разработчику для использования. 

 Для решения данной проблеммы поставим задачу разработать автономный программатор для чтения/записи SPD. 
 В качестве базовой платформы выбираем Raspberry Pi. Применение данный процессорного модуля - один из сотни возможных путей решения задачи. Причины выбора модуля: широко распространенная Linux платформа, легкая в    освоении и настройке, позволяющая инженерам реализовывать новые возможности встраиваемых ARM платформ. 

 Дополнительное требование к работе программатора: изменения в SPD должны производится таким образом, что бы ислючить повреждение модуля механически или в результате пайки. Для удовлетворения этого требования необходимо применить разъем DIMM. Такой подход позволяет быстрое подключение к SPD без риска повреждения и без паяного неразрывного соединения.  

 h2. +*Основные требования к проекту*+ 

 * Open-source проект, под управлением [[dev.xdevs.com]] и *_mercurial_* DVCS 
 * Полноразмерные DDR3/DDR4 UDIMM/RDIMM разъемы совместимые со стандартными модулями памяти 
 * Стандартный разъем для подключения к Raspberry Pi 
 * I2C EEPROM интерфейс подключен к соответствующему порту Raspberry Pi 
 * напряжение питания SPD +3.3V 
 * переключатель питания модулей памяти для замены без отключения питания Raspberry Pi 
 * переключатель выбора адреса I2C для подключения нескольких адаптеров к одной Raspberry Pi 
 * MCU    -(LPC11U37FBD64)- в составе адаптера для реализации дополнительных функций, автономного программирования без Raspberry Pi (используется для автоматизации процессов) 

 Структура проекта 
 Все проектные файлы а так же сопутствующая документация отслеживается Распределенной Системой Контроля Версий Mercurial DVCS. +Это бесплатная и хорошо поддерживаяемая система контроля версий с поддержкой синтаксиса, аналогично GIT и SVN.+ (_примечание: определение    перенести в нижнюю часть статьи, в качестве справочного уточнения_) 
 Для работы с проектом вы можете получить дерево проекта, выполнив команду:  
 <span>hg <pre><span>hg clone http://dev.xdevs.com/hg/ddr4s <span> <span></pre> 
 акже можно просмотреть отдельные фалы в дереве проекта [browse project tree here[https://dev.xdevs.com/projects/rpi/repository]]. 

 Разработка аппаратной части 
 Потратив несколько часов получаем схему адаптера:  
 !http://doc.xdevs.com/doc/xDevs.com/DDR4s/img/schematic.png! ([Доступен PDF формат[https://dev.xdevs.com/projects/rpi/repository/entry/sch/DDR4S.pdf]]). 
 Аснова адаптера - простой дизайн с нбольшим количеством компонентов. Часть MCU не является обязательным, не требуется для работы с RPI. 
 Рисунок печатной платы делался для 4-х слоев, материал FR4. Внутренние слои предназначены для сигналов GND и питания. Для простоты сборки шелкография компонентов наносится с обеих сторон платы. Большая часть компонентов - для CMD монтажа, исключение: разъемы, переключатели, конденсаторы. Гербер файлы доступны для загрузки. (_+ссылка на гербер внизу статьи+_) 
 Внешний вид стека платы:  
 !http://doc.xdevs.com/doc/xDevs.com/DDR4s/img/small/stackup.jpg! 
 Для отдельных приложений DIY сборка платы может быть упрощена. 
 !http://dev.xdevs.com/projects/rpi/repository/entry/doc/simple.png! 
 На схеме показаны pull-up резисторы подтяжки I2C к питанию RPI, а также переключатель питания со светод 
 Внешний вид платы адаптера (ручная сборка): 
 !http://doc.xdevs.com/doc/xDevs.com/DDR4s/img/small/top.jpg! 
 Список компонентов:  
 * Выключатель питания SW4 (двухпозиционный) 
 * I2C pull-up резисторы    R10,R9 (2.2kOhm, 0603 5%) 
 * вспомогательный резистор R7 (0-10 ohm, 0603 5%) 
 * конденсаторы развязки C3,C2 (0.1uF 0603 X7R) 
 * Конденсатор фильтра питания C4 (100-560 uF 6.3-16V 7 mm диаметр, шаг выводов 4 mm) 
 * 2.54mm 26-контактный разъем для RPI порта расширения P1. 
 * разъем DDR3 240-pin DIMM 
 * разъем DDR4 288-pin DIMM (при необходимости) 
 Все компоненты расположены на верхней строне платы. 
 На нижней стороне платы расположены декоративные светодиоды 0603. 
 !http://doc.xdevs.com/doc/xDevs.com/DDR4s/img/small/back.jpg! 
 Питание, I2C, SPI и UART подключены к 26 контактному разъему. подключение к порту расширения Rasberry Pi производится с помощью плоского кабеля. 
 !http://doc.xdevs.com/doc/xDevs.com/DDR4s/img/small/header.jpg! 
 Для подключения нескольких адаптеров необходимо установить адрес с помощью двухпозиционного    переключателя с индикацией светодиодами. Такая настройка типична для линий A0, A1, A2 выводов I2C EEPROM. 
 !http://doc.xdevs.com/doc/xDevs.com/DDR4s/img/small/addr.jpg! 
 Микроконтроллер NXP LPC11U37FBD64 оснащен интерфейсом SWD для записи и отладки программного обеспечения. Для работы интерфейсов UART и USB микроконтроллера необходим кварцевый резонатор 12.000 МГц. 
 !http://doc.xdevs.com/doc/xDevs.com/DDR4s/img/small/mcu.jpg! 
 Внешний вид комплетка для работы адаптера:  
 !http://doc.xdevs.com/doc/xDevs.com/DDR4s/img/small/kit.jpg! 
 * Модуль памяти DDR3 Corsair UDIMM 
 * DDR плата адаптера 
 * Raspberry Pi Модель B с 2GB SD card и 26-контактным 2.54 mm кабелем 
 Подключение DDR3 модуля памяти к адаптеру:  
 !http://doc.xdevs.com/doc/xDevs.com/DDR4s/img/small/ddr3_prog.jpg! 
 Подключение DDR4 модуля памяти к адаптеру: 
 !http://doc.xdevs.com/doc/xDevs.com/DDR4s/img/small/ddr4_prog.jpg! 
 Одновременное подключение обоих типов модулей памяти не рекомендуется, из-за конфликта адресации I2C шины. 

 h1. Software design 
 Рассмотрим пошаговую инструкцию настройки Raspberry Pi для использование в данном проекте. 
 За основу возмем минимальный образ ОС, для обмена двнными с платой будем использовать сетевое подключение с поддержекой ssh. 
 Образ ОС может быть получен с [[http://www.linuxsystems.it/raspbian-wheezy-armhf-raspberry-pi-minimal-image/]] или    с зеркала    [local mirror[http://dev.xdevs.com/projects/rpi/repository/entry/os/raspbian_wheezy_20130923.img.7z]]. 
 Объем образа 120MB, Для записи на SD card можно использовать например: "Win32 Disk imager" от gruemaster, tuxinator2009 или любым аналогичным ПО для записи образа на носитель. 
 Пароль root - "raspberry". 

 h1. Настройка программного обеспечения 
 Для подключения к RPi    по сети необходимо правильно настроить сетевой интерфейс (eth0). В случае, если длкальная сеть использует DHCP достаточно добавить строку конфигурации в    /etc/network/interfaces 
 <pre> iface eth0 inet dhcp </pre> 
 Если размер SD card    более 1GB можкт понадобится дополнительная разметка дискового пространства:  
 Создаем новые разделы используя fdisk, таблица разделов может выглядет следующим образом: 
 <pre> 
 root@raspberry-pi:/# fdisk /dev/mmcblk0 
 Command (m for help): p 
 Disk /dev/mmcblk0: 32.1 GB, 32127320064 bytes 
 ... 
         Device Boot        Start           End        Blocks     Id    System 
 /dev/mmcblk0p1              2048        104447         51200      b    W95 FAT32 
 /dev/mmcblk0p2            104448       1742847        819200     83    Linux 
 /dev/mmcblk0p3           1742848       1945599        101376     82    Linux swap / Solaris 
 /dev/mmcblk0p4           1945600      62748671      30401536     83    Linux 
 </pre> 

 Затем для нового раздела задаем тип файловой системы ext4. 
 <pre> 
 root@raspberry-pi:/# mkfs.ext4 /dev/mmcblk0p4 -L ummspi2 
 mke2fs 1.42.5 (29-Jul-2012) 
 Filesystem label=ummspi2 
 OS type: Linux 
 Block size=4096 (log=2) 
 Fragment size=4096 (log=2) 
 .... 
 .... 
 Creating journal (32768 blocks): done 
 Writing superblocks and filesystem accounting information: done 
 </pre> 
 Убедимся, что изменения внесены в /etc/fstab: 
 <pre> 
 root@raspberry-pi:/# cat /etc/fstab 
 # <file system> <mount point>     <type>            <options>                 <dump>    <pass> 
 proc              /proc             proc              defaults                  0         0 
 /dev/mmcblk0p1    /boot             vfat              defaults                  0         0 
 /dev/mmcblk0p3    none              swap              sw                        0         0 
 */dev/mmcblk0p4    /repo             ext4              defaults                  0         0* 
 root@raspberry-pi:/# 
 </pre> 
 Теперь у нас есть раздел /repo тип файлово системы ext4. 
 Монтируем его для использования. 
 <pre> 
 root@raspberry-pi:/# mount -a 
 </pre> 
 Диск готов к использованию. 
 <pre> 
 root@raspberry-pi:/# df -h 
 Filesystem        Size    Used Avail Use% Mounted on 
 rootfs            788M    566M    222M    72% / 
 /dev/root         788M    566M    222M    72% / 
 devtmpfs          212M       0    212M     0% /dev 
 tmpfs              44M    180K     44M     1% /run 
 tmpfs             5.0M       0    5.0M     0% /run/lock 
 tmpfs             108M       0    108M     0% /run/shm 
 /dev/mmcblk0p1     50M     19M     32M    37% /boot 
 */dev/mmcblk0p4     29G    172M     27G     1% /repo* 
 </pre> 
 Хорошим правилом считается - обновление основных пакетов ОС перед установкой нового ПО. Убедитесь в наличии достаточного количества дискогового пространства для данных обновлений.  
 <pre> 
 root@raspberry-pi:~# aptitude update 
 Get: 1 http://archive.raspbian.org wheezy Release.gpg [490 B] 
 Get: 2 http://archive.raspbian.org wheezy Release [14.4 kB] 
 Get: 3 http://archive.raspbian.org wheezy/main Sources [6262 kB] 
 70% [3 Sources 4375 kB/6262 kB 70%].....79.8 kB/s 23s 
 ... 
 Current status: 33 updates [+33], 77 new [+77]. 
 </pre> 




Back