Выбор чипа для фреймбуфера фоторамки оказался не простым. Изначально был соблазн использовать статическое ОЗУ. Оно имеет очень простой интерфейс - данные, адреса, и, практически один управляющий сигнал - "разрешение записи" (WE).
Могут быть еще какие- нибудь управляющие сигналы, типа CS и/или OE, но при использовании всего одного чипа они не нужны. Но, после продолжительных поисков в компьютерном хламе и изучения множества даташитов, ничего подходящего найти не удалось - либо недостаточный объем, слабое быстродействие или +5В питание.
Пришлось думать дальше..
Из динамического ОЗУ первых поколений (асинхронного) тоже ничего не подошло.
В конце концов решено было использовать синхронное динамическое ОЗУ (SDR SDRAM).
Что оно из себя представляет, можно почитать, например, в Википедии. В настоящее время такое ОЗУ используется в различной компьютерной периферии или в сетевом оборудовании. Какое-то время назад оно использовалось в качестве "основного" на материнских платах. Для этого, из отдельных чипов, делают специальные модули - димы (DIMM).
Один такой модуль мы и собираемся использовать.
После припаивания проводов и "отсечения" лишнего получился такой шилд.
Вид снизу:
Вид сверху:
Конкретно на этот чип мне даташит найти не удалось, но в интернете есть много даташитов на подобные чипы от других производителей. Я пользовался вот этим 42s16800.pdf от "ISSI" (
К сожалению интерфейс у SDRAM довольно сложный. Напомню, что адресное пространство первого динамического ОЗУ, в отличие от статического, перестало быть "линейным". Оно было представлено в виде плоскости, состоящей из некоторого количества строк и столбцов. Поэтому адресная шина стала "мультиплексной", а к управляющим сигналам добавились сигналы фиксации строки и столбца (RAS, CAS).
C одной стороны, это уменьшило количество адресных линий, с другой - усложнило интерфейс. У синхронного динамического ОЗУ интерфейс еще сложнее. Появился тактовый сигнал (CLK), а основные управляющие сигналы RAS, CAS и WE потеряли свой изначальный смысл и являются тремя битами кода операции. Кроме того, появилась необходимость в процедуре инициализации, которая необходима для настройки режимов работы.
Для подключения к нашей платке Марсоход понадобилось 19 сигналов, четыре управляющих (RAS, CAS, WE и CLK), 12 адресов (A0-A11) и три бита данных. Цоколевку дима SDR SDRAM-168 легко найти в интернете, но для удобства пайки, я выкинул лишнее (практически все нужное, кроме клока, находится в седней части, между двумя ключами) и расположил контакты в два столбца.
1 85
. .
10 94
====================================
11 DQ8 95 DQ40
12 VSS 96 VSS
13 DQ9 97 DQ41
14 DQ10 98 DQ42
15 DQ11 99 DQ43
16 DQ12 100 DQ44
17 DQ13 101 DQ45
18 VDD 102 VDD
19 DQ14 103 DQ46
20 DQ15 104 DQ47
21 n/c 105 n/c
22 n/c 106 n/c
23 VSS 107 VSS
24 n/c 108 n/c
25 n/c 109 n/c
26 VDD 110 VDD
27 /WE 111 /CAS
28 DQMB0 112 DQMB4
29 DQMB1 113 DQMB5
30 /S0 114 /S1
31 DU 115 /RAS
32 VSS 116 VSS
33 A0 117 A1
34 A2 118 A3
35 A4 119 A5
36 A6 120 A7
37 A8 121 A9
38 A10/AP 122 BA0
39 BA1 123 A11
40 VDD 124 VDD
====================================
41 VDD 125 CK1
42 CK0 126 A12
43 VSS 127 VSS
44 DU 128 CKE0
. .
84 168
Кроме сигналов, подключенных к платке Марсоход, есть и другие важные сигналы, которые нельзя оставлять "в воздухе"
Кратко опишу их назначение ( и куда нужно подключить ):
- CS - чип селект, нужен когда чипов больше одного ( на "0")
- CKE - разрешение клока ( на "1")
- DQMx - имеют смысл в чипах с разрядностью более 8 бит, чтобы иметь доступ к каждому байту отдельно (все на "0")
- BA0, BA1 - номер банка (оба на "0")
- A12 - старший адрес (на "0")
Для заполнения фреймбуфера нужными данными, первое, что пришло в голову - подключить к компьютеру через COM-порт. Что собственно и было реализовано в нашем проекте (
В каждом, посылаемом в последовательный порт байте, младшие шесть бит - это два рядом стояших пикселя. Седьмой
бит не используется. Восьмой сбрасывает счетчик принятых байт, его нужно установить один раз только в салом начале.
Необходимый для записи в порт файл можно сделать с помощью простенькой программки code (она так же есть в архиве с проектом). Она преобразует 24-битный битмап с разрешением 1280х800 в файл описанного формата.
Сначала мы пробовали подключать к стандартному COM-порту на компьютере. Даже на скорости 115200 получалось не очень быстро, весь экран заполняется секунд за 40.
Гораздо "живее" все работает через наш замечательный программатор mbftdi. Используемый в нем чип - двухканальный. Один канал уже занят под JTAG , а второй просто выведен на "гребенку", и его можно использовать для связи с нашей платкой Марсоход.
Под COM-порт в нашем проекте используется пин DN, а на программаторе Tx второго канала (на фотографии я его подписал).
Максимальная скорость, на которой может работать UART на FTDI 12мбит, но получить такую частоту из 100Мгц имеющихся на плате Марсоход в проекте нельзя. Ближайшее, что нам подошло - 5мбит.
В результате получилось вот так:
В дальнейшем, думаю, можно попробовать подключить нашу фоторамку, через какой-нибудь другой интерфейс, например через Ethernet.
Подробнее...