Фоторамка. Часть3. Фреймбуффер.

Фоторамка с платой Марсоход

Выбор чипа для фреймбуфера фоторамки оказался не простым. Изначально был соблазн использовать статическое ОЗУ. Оно имеет очень простой интерфейс - данные, адреса, и, практически один управляющий сигнал - "разрешение записи" (WE).
Могут быть еще какие- нибудь управляющие сигналы, типа CS и/или OE, но при использовании всего одного чипа они не нужны. Но, после продолжительных поисков в компьютерном хламе и  изучения множества даташитов, ничего подходящего найти не удалось - либо недостаточный объем, слабое быстродействие или +5В питание.

Пришлось думать дальше..

Из динамического ОЗУ первых поколений (асинхронного) тоже ничего не подошло.
В конце концов решено было  использовать синхронное динамическое ОЗУ (SDR SDRAM).
Что оно из себя представляет, можно почитать, например, в Википедии. В настоящее время такое ОЗУ используется в различной компьютерной периферии или в сетевом оборудовании. Какое-то время назад оно использовалось в качестве "основного" на материнских платах. Для этого, из отдельных чипов, делают специальные модули - димы (DIMM).
Один такой модуль мы и собираемся использовать.

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.

 


Добавить комментарий