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 clone http://dev.xdevs.com/hg/ddr4s <span> 
 акже можно просмотреть отдельные фалы в дереве проекта [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* 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> 
 Запускаем процесс обновления. Ниже предствален пример. 
 <pre> 
 root@raspberry-pi:~# aptitude dist-upgrade 
 The following packages will be upgraded: 
   apt apt-utils base-files dmsetup dpkg gnupg gpgv initscripts libapt-inst1.5 libapt-pkg-dev libapt-pkg4.12 libc-bin libc-dev-bin libc6 libc6-dev libdevmapper1.02.1 libgnutls26 
   libssl1.0.0 linux-libc-dev locales lsb-base multiarch-support openssh-client openssh-server perl perl-base perl-modules ssh sysv-rc sysvinit sysvinit-utils tzdata wget 
 The following packages are RECOMMENDED but will NOT be installed: 
   bcc gcc gcc-4.4 gcc-4.5 gcc-4.6 gcc-4.7 gnupg-curl libldap-2.4-2 manpages-dev psmisc 
 33 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 
 Need to get 35.5 MB of archives. After unpacking 234 kB will be freed. 
 Do you want to continue? [Y/n/?] Y 
 ... 
 ... 
 Setting up ssh (1:6.0p1-4+deb7u1) ... 
 Setting up perl (5.14.2-21+rpi2+deb7u1) ... 
 Current status: 0 updates [-33]. 
 </pre> 
 Автор статьи    предпочитает использовать в качестве системного редактора mcedit. Производим замену редактора поумолчанию nano на mcedit:  
 <pre> 
 root@raspberry-pi:/etc/mercurial# update-alternatives —config editor 
 There are 3 choices for the alternative editor (providing /usr/bin/editor). 
   Selection      Path                 Priority     Status 
   0              /bin/nano             40          auto mode 
   1              /bin/nano             40          manual mode 
   2              /usr/bin/mcedit       25          manual mode 
   3              /usr/bin/vim.tiny     10          manual mode 
 Press enter to keep the current choice[*], or type selection number: 2 
 update-alternatives: using /usr/bin/mcedit to provide /usr/bin/editor (editor) in manual mode 
 </pre> 
 Основные данные проекта хранятся в локальном репозитории. Для доступа к ним - установим Mercurial: 
 <pre> 
 apt-get install mercurial 
 root@raspberry-pi:~# apt-get install mercurial 
 Reading package lists... Done 
 Building dependency tree 
 Reading state information... Done 
 The following extra packages will be installed: 
   ca-certificates mercurial-common openssl python python-minimal 
 Suggested packages: 
   qct wish vim emacs kdiff3 kdiff3-qt kompare meld xxdiff tkcvs mgdiff python-mysqldb python-pygments python-openssl python-doc python-tk 
 The following NEW packages will be installed: 
   ca-certificates mercurial mercurial-common openssl python python-minimal 
 0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded. 
 Need to get 3514 kB of archives. 
 After this operation, 10.3 MB of additional disk space will be used. 
 Do you want to continue [Y/n]? Y 
 Get:1 http://archive.raspbian.org/raspbian/ wheezy/main python-minimal all 2.7.3-4+deb7u1 [42.8 kB] 
 ... 
 ... 
 Creating config file /etc/mercurial/hgrc.d/hgext.rc with new version 
 Processing triggers for ca-certificates ... 
 Updating certificates in /etc/ssl/certs... 158 added, 0 removed; done. 
 Running hooks in /etc/ca-certificates/update.d....done. 
 </pre> 
 [Краткая статья по использованю Murcurial[https://xdevs.com/hg-intro/]], [официальная документация[http://mercurial.selenic.com/guide]]. //снести вниз статьи, в справочные материалы 




Back