аппаратный SPI - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 212»
Модератор форума: demanik 
Форум Picbasic.ru » Программирование МК » Proton PicBasic » аппаратный SPI (запутался!)
аппаратный SPI
доцент2 Дата: Сб, 20.06.2015, 18:34  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 311
Репутация: 1   ±
Замечания:   ±
На сайте с 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 (сброс аппаратный)
Прикрепления: Nokia_1616_disp.bas(6Kb)

Сообщение отредактировал доцент2 - Сб, 20.06.2015, 19:04
ЯНДЕКС Дата: 20.06.2015
holyuser Дата: Сб, 20.06.2015, 21:23  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 233
Репутация: 5   ±
Замечания:   ±
На сайте с 12.12.2007

Статус: Offline

Попробуем разобраться, что не так? Совсем ничего не показывает, или билиберда?
Для начала надо прикинуть, что в аппаратном SPI байты передаются всегда старшим битом вперед, (Msbfirst).
доцент2 Дата: Сб, 20.06.2015, 21:38  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 311
Репутация: 1   ±
Замечания:   ±
На сайте с 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
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Кто-нибудь может просветить, как расшифровать данные, которые передаются между двумя SPI устройствами? Есть две строки - Переданные и полученные. Что-то не могу найти. Устройство - 93с56.
Строки выглядят следующим образом: К примеру, данные снял анализатором Saleae -
MOSI: 0x4B851080BA987F8 - MISO: 0x4C1FFA800989680
или
MOSI: 0x4B8510800000001 - MISO: 0x4C1FFA800000025
В первой строке почему-то последние символы 989680 - присутствуют всегда. А вот первые периодически меняются. Зависит неизвестно от чего. Кто может внятно разъяснить, что эти символы могут означать?
доцент2 Дата: Вс, 21.06.2015, 17:59  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 311
Репутация: 1   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

93С56 в описании на 2-й стр представлена последовательность "данных" в зависимости от действия.
Прикрепления: 93C46_93C66.pdf(234Kb)
ADMIN Дата: Вс, 21.06.2015, 19:02  |                                                                                                                Сообщение # 6
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Да, видел это, конечно. Но привязать не могу эти знания к текущим последовательностям. Запросы разные каждый раз. Ответ практически всегда оканчивается на указанные в предыдущем посте цифры. Мне пока непонятно
ivan_fd Дата: Вс, 21.06.2015, 19:20  |                                                                                                                Сообщение # 7
Группа: Модераторы
Ранг:  Специалист
Сообщений: 882
Репутация: 47   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 311
Репутация: 1   ±
Замечания:   ±
На сайте с 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
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Спасибо за ответ. Но... есть опять вопросы, возможно, совместными усилиями поможем мне?
Так.... Разве старт бит не на линии CS? Это первое.... Пока не понятно...
Второе - почему тогда первый регистр в виде одного байта, когда остальные в виде 16-разрядных переменных?
Еще - зачем много данных, если адрес один, и команда - стереть все? 
Следующее - это память, которая всегда остается неизменной. Проверял Pickit 2. То есть, команда стереть все - неуместна. Так, по логике?
Есть еще варианты? Товарищи, кто знаком сильно с этим протоколом?
доцент2 Дата: Вс, 21.06.2015, 20:21  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 311
Репутация: 1   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

ivan_fd  спасибо.
Купился на на команду SHOut SDA, SCLK, MsbFirst, [Par.HighByte] и размечтался о SPI 8 бит.
Из головы вылетело, что для данного дисплея SPI 9-ти битный.
Если написать функцию побитной передачи скорость передачи данных изменить?
доцент2 Дата: Вс, 21.06.2015, 20:26  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 311
Репутация: 1   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

Цитата ADMIN ()
Так.... Разве старт бит не на линии CS? Это первое.... Пока не понятно...
Нет, посмотри например картинку на стр 8. первый бит.
Цитата ADMIN ()
Второе - почему тогда первый регистр в виде одного байта, когда остальные в виде 16-разрядных переменных?
стр.6 картинка 5. сначала идет Start bit и Op Сode, затем адрес, а потом 16-ти разрядные данные.
Цитата ADMIN ()
Еще - зачем много данных, если адрес один, и команда - стереть все?
После передачи адреса данные считываются друг за другом с приращением адреса пока SC находится в состоянии 1. По поводу команды стереть все, вот здесь вопрос! Надо подумать.
Прикрепления: 3041854.pdf(234Kb)

Сообщение отредактировал доцент2 - Вс, 21.06.2015, 20:34
ivan_fd Дата: Вс, 21.06.2015, 20:34  |                                                                                                                Сообщение # 12
Группа: Модераторы
Ранг:  Специалист
Сообщений: 882
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

доцент2, вообще то с SHOut можно послать и 9 бит:

SHOut DI, CLK, MsbFirst, [%110011001\9]

Цитата
Если написать функцию побитной передачи скорость передачи данных изменить?

Скорость будет зависеть от применяемого кварца и реализации функции.


Меня все время преследуют умные мысли...но я быстрее!!!
ivan_fd Дата: Вс, 21.06.2015, 20:44  |                                                                                                                Сообщение # 13
Группа: Модераторы
Ранг:  Специалист
Сообщений: 882
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

ADMIN, Вы просто хотите понять, что значат символы, или Вам нужно знать как работать с данным чипом?
Хотя и то и другое равнозначно.

Кстати, а какая у Вас память, точно по маркировке? Они ведь разные бывают.
 P.S: пример работы с 93LC56A , организация памяти 256 x 8 бит., есть в примерах
Протона.


Меня все время преследуют умные мысли...но я быстрее!!!
доцент2 Дата: Вс, 21.06.2015, 21:52  |                                                                                                                Сообщение # 14
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 311
Репутация: 1   ±
Замечания:   ±
На сайте с 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
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Цитата ivan_fd ()
ADMIN, Вы просто хотите понять, что значат символы, или Вам нужно знать как работать с данным чипом? Хотя и то и другое равнозначно.

Кстати, а какая у Вас память, точно по маркировке? Они ведь разные бывают.
 P.S: пример работы с 93LC56A , организация памяти 256 x 8 бит., есть в примерах
Протона.
Мне необходимо понять, что и куда записывается или что откуда читается. Как бы отследить, куда мастер обращается, чтобы считать или записать что-то. Логику работы прибора понять. Не самой памяти, а прибора, в котором она стоит. Как то так. 
Чип - 93c56em8.
Форум Picbasic.ru » Программирование МК » Proton PicBasic » аппаратный SPI (запутался!)
Страница 1 из 212»
Поиск: