аппаратный SPI
|
|
доцент2 |
Дата: Сб, 20.06.2015, 18:34 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
291
Замечания:
±
На сайте с 13.09.2011
Статус:
Offline
|
программка на 16f690 предназначена для работы с дисплеем Nokia-1616. При использовании команд SHOut все работает отлично, но относительно медлено даже при кварце в 20МГц. Хочу попробовать использовать аппаратный SPI. Перелопатил описание SPI вроде понятно, но не работает! Смотрел примеры в основном на Си, на протоне тоже есть, но для камней 24 серии, вообщем запутался! Прошу помощи! подключение дисплея: было Symbol CS=PORTB.5 ' Symbol SDA=PORTB.4 ' данные Symbol SCLK=PORTB.6 ' тактирование RESE ' сброс RES подключает к Vdd дисплея
стало 16F690 дисплей RC7 pin9 SDO ------> Data RC6 pin8 SS ------> SC RB6 pin11 SCK ------> CLK RESET подключен Vdd (сброс аппаратный)
Сообщение отредактировал
доцент2 - Сб, 20.06.2015, 19:04
|
|
|
|
holyuser |
Дата: Сб, 20.06.2015, 21:23 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
228
Замечания:
±
На сайте с 12.12.2007
Статус:
Offline
|
Попробуем разобраться, что не так? Совсем ничего не показывает, или билиберда? Для начала надо прикинуть, что в аппаратном SPI байты передаются всегда старшим битом вперед, (Msbfirst).
|
|
|
|
доцент2 |
Дата: Сб, 20.06.2015, 21:38 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
291
Замечания:
±
На сайте с 13.09.2011
Статус:
Offline
|
1. начну с того, что не проходит инициализация, а потом и все остальное. Т.е. дисплей не понимает передачу. 2. для дисплея тоже передача идет старшим битом вперед. 3. меня смущает то, что перед очередной передачей надо устанавливать CS, SCLK, SDA, SCLK иначе не работает. CS = 0 SCLK = 0 : SDA = 1 : SCLK = 1 SHOut SDA, SCLK, MsbFirst, [Par.HighByte] 'передача старшего байта данных SCLK = 0 : SDA = 1 : SCLK = 1 SHOut SDA, SCLK, MsbFirst, [Par.LowByte] 'передача младшего байта данных CS = 1
|
|
|
|
ADMIN |
Дата: Вс, 21.06.2015, 10:41 | Сообщение # 4 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Online
|
Кто-нибудь может просветить, как расшифровать данные, которые передаются между двумя SPI устройствами? Есть две строки - Переданные и полученные. Что-то не могу найти. Устройство - 93с56. Строки выглядят следующим образом: К примеру, данные снял анализатором Saleae - MOSI: 0x4B851080BA987F8 - MISO: 0x4C1FFA800989680 или MOSI: 0x4B8510800000001 - MISO: 0x4C1FFA800000025 В первой строке почему-то последние символы 989680 - присутствуют всегда. А вот первые периодически меняются. Зависит неизвестно от чего. Кто может внятно разъяснить, что эти символы могут означать?
|
|
|
|
доцент2 |
Дата: Вс, 21.06.2015, 17:59 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
291
Замечания:
±
На сайте с 13.09.2011
Статус:
Offline
|
93С56 в описании на 2-й стр представлена последовательность "данных" в зависимости от действия.
|
|
|
|
ADMIN |
Дата: Вс, 21.06.2015, 19:02 | Сообщение # 6 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Online
|
Да, видел это, конечно. Но привязать не могу эти знания к текущим последовательностям. Запросы разные каждый раз. Ответ практически всегда оканчивается на указанные в предыдущем посте цифры. Мне пока непонятно
|
|
|
|
ivan_fd |
Дата: Вс, 21.06.2015, 19:20 | Сообщение # 7 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
доцент2, вот Вы говорите, что смотрели примеры и наверное читали описание работы с данным дисплеем. Драйвер дисплея использует 9 бит SPI. Старший бит означает команда (0), данные (1), а далее сами данные, или команды, 8 бит. Поэтому у Вас при этом (SCLK = 0 : SDA = 1 : SCLK = 1 ), что то работало. Так как в данном случаи Вы передаете 1.
Напишите сами функцию передачи 9 бит.
|
|
|
|
доцент2 |
Дата: Вс, 21.06.2015, 19:47 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
291
Замечания:
±
На сайте с 13.09.2011
Статус:
Offline
|
примерно так $4B851080BA987F8 --->04 B8 51 08 0B A9 87 F8 Start bit Op cod адрес данные 1 данные 2 данные 3 1 00 10 111000 01010001 00001000 00001011 10101001 10000111 11111000 ERAL (Erase all)*2 | пока не пойму зачем эти данные при такой команде |
Сообщение отредактировал
доцент2 - Вс, 21.06.2015, 20:10
|
|
|
|
ADMIN |
Дата: Вс, 21.06.2015, 19:57 | Сообщение # 9 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Online
|
Спасибо за ответ. Но... есть опять вопросы, возможно, совместными усилиями поможем мне? Так.... Разве старт бит не на линии CS? Это первое.... Пока не понятно... Второе - почему тогда первый регистр в виде одного байта, когда остальные в виде 16-разрядных переменных? Еще - зачем много данных, если адрес один, и команда - стереть все? Следующее - это память, которая всегда остается неизменной. Проверял Pickit 2. То есть, команда стереть все - неуместна. Так, по логике? Есть еще варианты? Товарищи, кто знаком сильно с этим протоколом?
|
|
|
|
доцент2 |
Дата: Вс, 21.06.2015, 20:21 | Сообщение # 10 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
291
Замечания:
±
На сайте с 13.09.2011
Статус:
Offline
|
ivan_fd спасибо. Купился на на команду SHOut SDA, SCLK, MsbFirst, [Par.HighByte] и размечтался о SPI 8 бит. Из головы вылетело, что для данного дисплея SPI 9-ти битный. Если написать функцию побитной передачи скорость передачи данных изменить?
|
|
|
|
доцент2 |
Дата: Вс, 21.06.2015, 20:26 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
291
Замечания:
±
На сайте с 13.09.2011
Статус:
Offline
|
Цитата ADMIN ( ) Так.... Разве старт бит не на линии CS? Это первое.... Пока не понятно... Нет, посмотри например картинку на стр 8. первый бит. Цитата ADMIN ( ) Второе - почему тогда первый регистр в виде одного байта, когда остальные в виде 16-разрядных переменных? стр.6 картинка 5. сначала идет Start bit и Op Сode, затем адрес, а потом 16-ти разрядные данные. Цитата ADMIN ( ) Еще - зачем много данных, если адрес один, и команда - стереть все? После передачи адреса данные считываются друг за другом с приращением адреса пока SC находится в состоянии 1. По поводу команды стереть все, вот здесь вопрос! Надо подумать.
Сообщение отредактировал
доцент2 - Вс, 21.06.2015, 20:34
|
|
|
|
ivan_fd |
Дата: Вс, 21.06.2015, 20:34 | Сообщение # 12 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
доцент2, вообще то с SHOut можно послать и 9 бит:
SHOut DI, CLK, MsbFirst, [%110011001\9]
Цитата Если написать функцию побитной передачи скорость передачи данных изменить? Скорость будет зависеть от применяемого кварца и реализации функции.
|
|
|
|
ivan_fd |
Дата: Вс, 21.06.2015, 20:44 | Сообщение # 13 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
ADMIN, Вы просто хотите понять, что значат символы, или Вам нужно знать как работать с данным чипом? Хотя и то и другое равнозначно.
Кстати, а какая у Вас память, точно по маркировке? Они ведь разные бывают. P.S: пример работы с 93LC56A , организация памяти 256 x 8 бит., есть в примерах Протона.
|
|
|
|
доцент2 |
Дата: Вс, 21.06.2015, 21:52 | Сообщение # 14 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
291
Замечания:
±
На сайте с 13.09.2011
Статус:
Offline
|
CS = 0 SCLK = 0 : SDA = 1 : SCLK = 1 SHOut SDA, SCLK, MsbFirst, [Par.HighByte] 'передача старшего байта данных SCLK = 0 : SDA = 1 : SCLK = 1 SHOut SDA, SCLK, MsbFirst, [Par.LowByte] 'передача младшего байта данных CS = 1
упростил код: CS = 0 SHOut SDA, SCLK, MsbFirst, [(%100000000+Par.HighByte)\9, (%100000000+Par.LowByte)\9] CS = 1 но на скорость это не повлияло.
|
|
|
|
ADMIN |
Дата: Пн, 22.06.2015, 04:53 | Сообщение # 15 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Online
|
Цитата ivan_fd ( ) ADMIN, Вы просто хотите понять, что значат символы, или Вам нужно знать как работать с данным чипом? Хотя и то и другое равнозначно.
Кстати, а какая у Вас память, точно по маркировке? Они ведь разные бывают. P.S: пример работы с 93LC56A , организация памяти 256 x 8 бит., есть в примерах Протона. Мне необходимо понять, что и куда записывается или что откуда читается. Как бы отследить, куда мастер обращается, чтобы считать или записать что-то. Логику работы прибора понять. Не самой памяти, а прибора, в котором она стоит. Как то так. Чип - 93c56em8.
|
|
|
|