|
|
  |
STM32F103C8 + S1D15D14 чтение из DDRAM |
|
|
|
Sep 15 2015, 13:00
|
Группа: Участник
Сообщений: 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
|
|
|
|
|
Sep 15 2015, 14:05
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата Сначала был уверен, что линия MISO, оставшаяся внизу после передачи последнего бита у вас мастер кто? контроллер или дисплей? Если контроллер то почему на мастер инпут у вас была какая-то передача? документацию на S1D15D14 неплохо было бы кинуть... схему подключения тоже, для понятности, фото не нужно....
|
|
|
|
|
Sep 15 2015, 15:10
|
Группа: Участник
Сообщений: 6
Регистрация: 15-09-15
Пользователь №: 88 416

|
Цитата(Golikov A. @ Sep 15 2015, 17:05)  у вас мастер кто? контроллер или дисплей? Если контроллер то почему на мастер инпут у вас была какая-то передача? Моя ошибка, перепутал. конечно же MOSI. мастер- контроллер. дело в том, что spi блок переключает состояние только по необходимости и поэтому, если последний переданный бит был единицей, то линия и остаётся в верхнем положении. если последним следовал нуль, то и линия внизу. дока на дисплей http://www.mikrocontroller.net/attachment/...E_14_030526.pdfа править свою писанину никак нельзя? а то стыдно. название дисплея в шапке перепутал (S1D15 G14) и mosi с miso
Эскизы прикрепленных изображений
|
|
|
|
|
Sep 16 2015, 06:45
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата а править свою писанину никак нельзя? а то стыдно. название дисплея в шапке перепутал (S1D15G14) и mosi с miso хотите чтобы следующие уже ответившие выглядели глупо%  ? Цитата дело в том, что spi блок переключает состояние только по необходимости и поэтому, если последний переданный бит был единицей, то линия и остаётся в верхнем положении. если последним следовал нуль, то и линия внизу так у вас 1 проводной интерфейс?... тогда чтобы слейв по этой же линии что-то обратно отдал, надо ее переводить в 3 состояние, но принять вы что-то сможете только по другой ноге MISO, так как по MOSI вы что-то примите, только если контроллер переведете в слейв, а тогда он не выдаст клоки. Или же вам надо использовать специальный 1 проводной режим, в некоторых STM он есть, сам все это перещелкивает. Либо заводить контакт на обе ноги MOSI и MISO и на время приема MOSI переводить на вход. Какой вариант вы реализуете?
|
|
|
|
|
Sep 16 2015, 06:47
|

Частый гость
 
Группа: Участник
Сообщений: 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); Должно помочь.
|
|
|
|
|
Sep 16 2015, 07:00
|

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

|
Цитата(Golikov A. @ Sep 16 2015, 12:50)  И самый главный вопрос
пункт 8.1 описания
c этим то что делать? А вот до туда я не дочитал... сразу пошёл искать подключение и команды. Чтож, ничего не поделать, RAM не будет читаться. Зато, мне кажется, двусторонний обмен данными регистров получить удастся.
|
|
|
|
|
Sep 16 2015, 13:23
|
Группа: Участник
Сообщений: 6
Регистрация: 15-09-15
Пользователь №: 88 416

|
ну чтож, я даже не ожидал такой быстрой реакции. благодарю всех ответивших.
меня сразу смутило, что для последовательного порта диаграмма чтения указана где-то в описании команд. смутило, но я не отступил. вот буковки читать иногда полезно. спасибо, Golikov A.
идея про перезагрузку spi у меня появилась самостоятельно, но я её не успел реализовать. всё равно благодарю AlanDrakes!
чтение памяти было самым дубовым решением проблемы, но не единственным. буду рисовать точками. при адекватной оптимизации может получится даже быстрее всем спасибо!.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|