реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> STM32F103C8 + S1D15D14 чтение из DDRAM
BittleF1998
сообщение Sep 15 2015, 13:00
Сообщение #1





Группа: Участник
Сообщений: 6
Регистрация: 15-09-15
Пользователь №: 88 416



Цель: масковые шрифты, пиктограммы.

Задача: чтение из памяти дисплея.

Осложнения: после установки необходимой области (команды 0x2A,0x2B) и отправки команды RAM data read(0x2E) перевожу SPI в bidirectional режим(BIDIMODE), однако на выходе(SPI->DR) почему-то 0xFF, тактовые импульсы есть, данных нет.

Действия: объединил промежуток опущенного CS (до этого поднимал после каждого байта) как сказано на 36 странице документации
изменил режим MISO с push-pull afio на open drain afio с добавлением 4.7к резистора на питание. Сначала был уверен, что линия MISO, оставшаяся внизу после передачи последнего бита(он там 0 получается- 0x2E) давит сигналы с дисплея, однако когда я отключал ножку PA7 от afio блока перед началом чтения, увидел, что вывод так и остаётся висеть, подтянутый к питанию.

Косяки: не вставляю dummy clock перед чтением. сделать это будет очень непросто с моей архитектурой кода. но пока не появились хоть какие-то данные, запариваться глупо.

разрабатываю часики в личное пользование.
сейчас установлен только дисплей, МК, внешний spi flash.
питание 3.3в от программатора, конденсатор керамика 10uf фильтр.
CS и A0 сохраняют свои состояния на протяжении всей(восьмибитной) передачи.
завершения передачи жду в пустом цикле, ожидая флага. исправлю как-нибудь потом.

если это чем-то поможет, могу предоставить исходники, фото монтажа, схемы, ссылки на используемую мной документацию.

Сообщение отредактировал BittleF1998 - Sep 15 2015, 13:03
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 15 2015, 14:05
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
Сначала был уверен, что линия MISO, оставшаяся внизу после передачи последнего бита

у вас мастер кто? контроллер или дисплей? Если контроллер то почему на мастер инпут у вас была какая-то передача?


документацию на S1D15D14 неплохо было бы кинуть...
схему подключения тоже, для понятности, фото не нужно....
Go to the top of the page
 
+Quote Post
BittleF1998
сообщение Sep 15 2015, 15:10
Сообщение #3





Группа: Участник
Сообщений: 6
Регистрация: 15-09-15
Пользователь №: 88 416



Цитата(Golikov A. @ Sep 15 2015, 17:05) *
у вас мастер кто? контроллер или дисплей? Если контроллер то почему на мастер инпут у вас была какая-то передача?


Моя ошибка, перепутал. конечно же MOSI.
мастер- контроллер.
дело в том, что spi блок переключает состояние только по необходимости и поэтому, если последний переданный бит был единицей, то линия и остаётся в верхнем положении. если последним следовал нуль, то и линия внизу.

дока на дисплей
http://www.mikrocontroller.net/attachment/...E_14_030526.pdf

а править свою писанину никак нельзя? а то стыдно. название дисплея в шапке перепутал (S1D15G14) и mosi с miso
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 16 2015, 06:45
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
а править свою писанину никак нельзя? а то стыдно. название дисплея в шапке перепутал (S1D15G14) и mosi с miso

хотите чтобы следующие уже ответившие выглядели глупо%sm.gif?


Цитата
дело в том, что spi блок переключает состояние только по необходимости и поэтому, если последний переданный бит был единицей, то линия и остаётся в верхнем положении. если последним следовал нуль, то и линия внизу

так у вас 1 проводной интерфейс?... тогда чтобы слейв по этой же линии что-то обратно отдал, надо ее переводить в 3 состояние, но принять вы что-то сможете только по другой ноге MISO, так как по MOSI вы что-то примите, только если контроллер переведете в слейв, а тогда он не выдаст клоки.

Или же вам надо использовать специальный 1 проводной режим, в некоторых STM он есть, сам все это перещелкивает. Либо заводить контакт на обе ноги MOSI и MISO и на время приема MOSI переводить на вход. Какой вариант вы реализуете?
Go to the top of the page
 
+Quote Post
AlanDrakes
сообщение Sep 16 2015, 06:47
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 101
Регистрация: 2-05-15
Из: Россия, Омск
Пользователь №: 86 474



Чтож.. Похоже, по схеме подключения остаётся вопрос: Шина описана с выводами SCL, MOSI, CS и A0. Как понимаю, подключение - 4-х проводное, с общим проводом MOSI/MISO (получается вывод SIO в инструкции).
Судя по мануалу к STM32, нужно сделать следующее, чтобы работало именно так:
Передать байт (команду), затем непосредственно перед началом чтения ответа выполнить:
Код
SPIn->CR1 &= ~(SPI_CR1_SPE | SPI_CR1_BIDIOE); // Отключить SPI и переключить режим двустороннего обмена на приём
SPIn->CR1 |= (SPI_CR1_BIDIMODE);  // Включаем режим двустороннего обмена по одной линии (ТОЛЬКО ПРИЁМ)
SPIn->CR1 |= (SPI_CR1_SPE); // Разрешаем работу SPI

После этого данные будут принудительно получаться с шины. Нужно получить необходимое колчичество и отключить SPI, затем отключить и режим однопроводной шины.
Код
SPIn->CR1 &= ~(SPI_CR1_SPE | SPI_CR1_BIDIOE | SPI_CR1_BIDIMODE);

Должно помочь.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 16 2015, 06:50
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



И самый главный вопрос

пункт 8.1 описания
Цитата
However ,the contents of display RAM cannot be read....

c этим то что делать?
Go to the top of the page
 
+Quote Post
AlanDrakes
сообщение Sep 16 2015, 07:00
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 101
Регистрация: 2-05-15
Из: Россия, Омск
Пользователь №: 86 474



Цитата(Golikov A. @ Sep 16 2015, 12:50) *
И самый главный вопрос

пункт 8.1 описания

c этим то что делать?

А вот до туда я не дочитал... сразу пошёл искать подключение и команды.
Чтож, ничего не поделать, RAM не будет читаться. Зато, мне кажется, двусторонний обмен данными регистров получить удастся.
Go to the top of the page
 
+Quote Post
Obam
сообщение Sep 16 2015, 08:03
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



"However ,the contents of display RAM cannot be read.... c этим то что делать?"

Жадничать не надо, параллельный интерфейс позволяет всё. И быстродействие будет сразу sm.gif


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
BittleF1998
сообщение Sep 16 2015, 13:23
Сообщение #9





Группа: Участник
Сообщений: 6
Регистрация: 15-09-15
Пользователь №: 88 416



ну чтож, я даже не ожидал такой быстрой реакции. благодарю всех ответивших.

меня сразу смутило, что для последовательного порта диаграмма чтения указана где-то в описании команд. смутило, но я не отступил.
вот буковки читать иногда полезно. спасибо, Golikov A.

идея про перезагрузку spi у меня появилась самостоятельно, но я её не успел реализовать.
всё равно благодарю AlanDrakes!

чтение памяти было самым дубовым решением проблемы, но не единственным. буду рисовать точками. при адекватной оптимизации может получится даже быстрее
всем спасибо!.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 16 2015, 15:25
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



вы уверены что вы не операцию на глазу через зад делаетеsm.gif?

Я с трудом улавливаю связь между тем что не удалось считать память и необходимость рисовать чего-то точками. Вы бы описали задачу чуть общее, народу на форум много, кто-то что-то подобное наверняка делал....
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 06:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01434 секунд с 7
ELECTRONIX ©2004-2016