Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2018-сен-21 07:12

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 58 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Re: вопрос по SPI
СообщениеДобавлено: 2015-сен-07 09:14 
Не в сети

Зарегистрирован: 2015-сен-03 10:00
Сообщения: 4
lexa-k писал(а):
но при обмене пачек из 8 слов с частотой 1кГц,

извините конечно.... но для такой частоты я бы написал программный SPI.... и забыл бы про все FIFO....
просто гнал бы кольцевой буфер по таймеру.....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по SPI
СообщениеДобавлено: 2015-сен-08 12:58 
Не в сети

Зарегистрирован: 2015-фев-26 16:14
Сообщения: 4
Подскажите, пожалуйста. Контроллер 1986ВЕ1Т(rev.2). Работаю в среде Keil. Задача: переслать буфер из SPI1 в SPI2, прочитать полученные данные в SPI2 и отправить их используя UART.
RX SPI1 (PC6) соединен с TX SPI2 (PC9), соответственно TX1 (PC5) с RX2 (PC10), FSS1 (PC8) с FSS2 (PC12), SCK1 (PC7) с SCK2 (PC11). SPI1 мастер, SPI2 слейв.
Использую ваши примеры с использованием библиотек на основе “opora.h”, а так же версии библиотек с аббревиатурой MDR (прикрепляю примеры).
На основе ваших примеров с использованием библиотек на “opora.h” – прерывания для обоих SPI срабатывают, но при опросе регистра состояния SR, ( флаг занятости модуля показывает, что сам модуль SPI2 неактивен - проблема устранилась ), буфер FIFO передатчика заполнен, а буфер FIFO приемника пуст. А непосредственно в UART приходят одни нули. С SPI1 проблем не наблюдается.
Используя ваши примеры с MDR библиотеками, вижу, что буфер FIFO приемника для SPI2 пуст, а также флаг занятости модуля показывает его неактивность. То же самое и в собственных проектах. С SPI1 все нормально, проблема в SPI2.
Проверял по отдельности (записывал в SPI буфер, считывал и отправлял через UART). В SPI1 все нормально. Через SPI2 тишина.
Пробовал проверять как на одной отладочной плате, так и соединяя 2 отладочные платы.
Прошу, скажите, в чем может быть проблема? В идеале хотелось бы получить 100% рабочий вариант с пересылкой данных между 2мя SPI (пример на MDR библиотеках в приоритете).


Вложения:
SSP.rar [8.76 КБ]
Скачиваний: 182
SSP_SPI_Master_Slaver.zip [564.7 КБ]
Скачиваний: 182
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по SPI
СообщениеДобавлено: 2015-окт-06 15:09 
Не в сети

Зарегистрирован: 2011-сен-28 12:44
Сообщения: 9
Откуда: ЗАО "МНИТИ"
Здравствуйте.

Вопрос по началу информационного взаимодействию двух МК по SPI после подачи питания.
На печатной плате установлены два МК 1986ВЕ1Т (условно, МК SPI Master и МК SPI Slave). На МК SPI Master используется SSP2 порта C, на МК SPI Slave используется SSP1 порта D.

Код инициализации МК SPI Master
Код:
// SPI
   PORT_DeInit(MDR_PORTC);
   PORT_StructInit(&PORT_InitStructure);
   // Configure SSP2 MASTER pins: FSS, CLK, RXD, TXD
   // Configure PORTD pins 12, 11, 10, 9
   PORT_InitStructure.PORT_Pin = PORT_Pin_12 | PORT_Pin_11 | PORT_Pin_9;
   PORT_InitStructure.PORT_MODE  = PORT_MODE_DIGITAL;
   PORT_InitStructure.PORT_PD   = PORT_PD_DRIVER;
   PORT_InitStructure.PORT_SPEED = PORT_SPEED_FAST;
   PORT_InitStructure.PORT_OE = PORT_OE_OUT;
   PORT_InitStructure.PORT_FUNC = PORT_FUNC_MAIN;
   PORT_Init(MDR_PORTC, &PORT_InitStructure);

   PORT_InitStructure.PORT_Pin = PORT_Pin_10;
   PORT_InitStructure.PORT_OE = PORT_OE_IN;
   PORT_Init(MDR_PORTC, &PORT_InitStructure);
   // Reset all SSP settings
   SSP_DeInit(MDR_SSP2);
   SSP_BRGInit(MDR_SSP2, SSP_HCLKdiv16);
   // SSP2 MASTER configuration ------------------------------------------------*/
   SSP_StructInit(&sSSP2);
   sSSP2.SSP_SCR = 0x10;
   sSSP2.SSP_CPSDVSR = 2;
   sSSP2.SSP_Mode = SSP_ModeMaster;
   sSSP2.SSP_WordLength = SSP_WordLength16b;
   sSSP2.SSP_SPH = SSP_SPH_1Edge;
   sSSP2.SSP_SPO = SSP_SPO_Low;
   sSSP2.SSP_FRF = SSP_FRF_SPI_Motorola;
   sSSP2.SSP_HardwareFlowControl = SSP_HardwareFlowControl_SSE;
   SSP_Init(MDR_SSP2, &sSSP2);
   SSP_ITConfig(MDR_SSP2, SSP_IT_RX | /*SSP_IT_RT |*/ SSP_IT_ROR, ENABLE);
   // Enable SSP2
   SSP_Cmd(MDR_SSP2, ENABLE);

Инициализация МК SPI Slave
Код:
// SSP
   /* Reset PORTD settings */
   PORT_DeInit(MDR_PORTD);
   PORT_StructInit(&PORT_InitStructure);
   /* Configure SSP1 SLAVE pins: FSS, CLK, RXD, TXD */
   /* Configure PORTD pins 5, 4, 3, 2 */
   PORT_InitStructure.PORT_Pin = PORT_Pin_5 | PORT_Pin_4 | PORT_Pin_3;
   PORT_InitStructure.PORT_OE = PORT_OE_IN;
   PORT_InitStructure.PORT_FUNC = PORT_FUNC_ALTER;
   PORT_InitStructure.PORT_PD = PORT_PD_DRIVER;
   PORT_InitStructure.PORT_SPEED = PORT_SPEED_FAST;
   PORT_InitStructure.PORT_MODE  = PORT_MODE_DIGITAL;
   PORT_Init(MDR_PORTD, &PORT_InitStructure);

   PORT_InitStructure.PORT_Pin = PORT_Pin_2;
   PORT_InitStructure.PORT_OE = PORT_OE_OUT;
   PORT_InitStructure.PORT_MODE = PORT_MODE_DIGITAL;   
   PORT_Init(MDR_PORTD, &PORT_InitStructure);
   // Reset all SSP settings
   SSP_DeInit(MDR_SSP1);
   SSP_BRGInit(MDR_SSP1, SSP_HCLKdiv16);
   /* SSP1 SLAVE configuration ------------------------------------------------*/
   SSP_StructInit(&sSSP);
   /* SSP1 SLAVE configuration ------------------------------------------------*/
   sSSP.SSP_SPH = SSP_SPH_1Edge;
   sSSP.SSP_SPO = SSP_SPO_Low;
   sSSP.SSP_SCR = 0x10;               
   sSSP.SSP_CPSDVSR = 12;            
   sSSP.SSP_Mode = SSP_ModeSlave;
   sSSP.SSP_WordLength = SSP_WordLength16b;   
   sSSP.SSP_FRF = SSP_FRF_SPI_Motorola;
   sSSP.SSP_HardwareFlowControl = SSP_HardwareFlowControl_SSE;   
   SSP_Init(MDR_SSP1, &sSSP);
   SSP_ITConfig(MDR_SSP1, SSP_IT_RX | SSP_IT_RT | SSP_IT_ROR, ENABLE);
   // Enable SSP1
   SSP_Cmd(MDR_SSP1, ENABLE);


При подаче питания на плату (т.е. включение двух МК происходит одновременно) SPI пакеты от МК SPI Master формируются по срабатыванию таймера, информационный обмен по SPI между МК отсутствует. При этом оба МК функционируют, на осциллографе сигналы SSP2_TXD присутствуют, с SSP2_FSS идёт высокий уровень, а SSP2_SCK не формируются.
Однако если с помощью Keil перепрошить МК SPI Slave (не меняя кода программы), то обмен по SPI начинает идти в полном объёме.

Подскажите в чем может быть проблема?


Последний раз редактировалось Dan_LionKing 2015-окт-07 11:15, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по SPI
СообщениеДобавлено: 2015-окт-06 15:54 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1141
Откуда: Тула
Может не включено тактирование портов?

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по SPI
СообщениеДобавлено: 2015-окт-06 17:30 
Не в сети

Зарегистрирован: 2011-сен-28 12:44
Сообщения: 9
Откуда: ЗАО "МНИТИ"
Тактирование портов включено, ещё раз проверил. Кроме SPI на обоих МК работает и другая периферия. Всё кроме SPI работает нормально сразу после подачи питания...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по SPI
СообщениеДобавлено: 2015-окт-07 17:05 
Не в сети

Зарегистрирован: 2011-сен-28 12:44
Сообщения: 9
Откуда: ЗАО "МНИТИ"
Вопрос снимается, заработало...

Тактирование портов было, а вот тактирования SSP не было.
Добавил:
Код:
RST_CLK_PCLKcmd(RST_CLK_PCLK_SSP1, ENABLE);

всё заработало...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по SPI
СообщениеДобавлено: 2016-фев-24 21:52 
Не в сети

Зарегистрирован: 2015-янв-27 13:32
Сообщения: 28
Пытался соединить две платы: LDM-HELPER-MB501 с контроллером 1986BE1T и Миландр Опора 22.0b ревизии 4 через SPI. Скажите пожалуйста, как инициализировать порты SSP1 двух плат производства LDM systems и Миландр ревизии 4 22.0b, если на HELPER-MB501 плате LDM system на портах висят подтягивающие резисторы на 10 КОм, а на плате "Опора" я снял все перемычки для SD-карты, соединил HELPER плату проводами к выводам напрямую (PC5, PC6, PC7, PC8), надо ли программно подтягивать ноги при инициализации обеих контроллеров? Я запутался, не могу добиться нормальной передачи данных из за этих подтяжек на двух платах, дело в том, что без инициализации программных подтяжек на осциллографе вижу нулевой уровень сигнала, а стоит вынуть проводки от платы Опора, уровень восстанавливается в "1" (MISO и MOSI).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по SPI
СообщениеДобавлено: 2016-фев-24 22:37 
Не в сети
Аватара пользователя

Зарегистрирован: 2011-окт-19 17:25
Сообщения: 526
Откуда: г. Владимир ОАО "ВКБР"
asket писал(а):
Пытался соединить две платы: LDM-HELPER-MB501 с контроллером 1986BE1T и Миландр Опора 22.0b ревизии 4 через SPI. Скажите пожалуйста, как инициализировать порты SSP1 двух плат производства LDM systems и Миландр ревизии 4 22.0b, если на HELPER-MB501 плате LDM system на портах висят подтягивающие резисторы на 10 КОм, а на плате "Опора" я снял все перемычки для SD-карты, соединил HELPER плату проводами к выводам напрямую (PC5, PC6, PC7, PC8), надо ли программно подтягивать ноги при инициализации обеих контроллеров? Я запутался, не могу добиться нормальной передачи данных из за этих подтяжек на двух платах, дело в том, что без инициализации программных подтяжек на осциллографе вижу нулевой уровень сигнала, а стоит вынуть проводки от платы Опора, уровень восстанавливается в "1" (MISO и MOSI).


Ну вообще интерфейсу SPI наличие подтяжек фиолетово, потому как это не I2C, он КМОП-уровнями общается. Они нужны там, где при включении питания нужно жёстко задать какой-либо уровень, и именно в этот первоначальный момент, когда все устройства находятся в "состоянии когнитивного диссонанса". :)

_________________
"В радиотехнике, как в церкви - многое не понятно, но приходится верить"
ВлГУ. к.т.н Садовский Н.В


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по SPI
СообщениеДобавлено: 2016-фев-24 22:49 
Не в сети

Зарегистрирован: 2015-янв-27 13:32
Сообщения: 28
HEMAH писал(а):
Ну вообще интерфейсу SPI наличие подтяжек фиолетово, потому как это не I2C, он КМОП-уровнями общается. Они нужны там, где при включении питания нужно жёстко задать какой-либо уровень, и именно в этот первоначальный момент, когда все устройства находятся в "состоянии когнитивного диссонанса". :)


Спасибо за ответ!
а как тогда объяснить явление когда выдернул провода MISO -MOSI, идущие от платы MB501 (Master), уровень восстановился в единицу, а втыкаешь обратно в плату Миландр - уровень садится в ноль? Настройка SPI: фаза=0, полярность=0, Моторола, перемычки все снял, порты проинициализированы без внутренней подтяжки и без открытого стока с двух сторон.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по SPI
СообщениеДобавлено: 2016-фев-24 23:04 
Не в сети
Аватара пользователя

Зарегистрирован: 2011-окт-19 17:25
Сообщения: 526
Откуда: г. Владимир ОАО "ВКБР"
asket писал(а):
HEMAH писал(а):
Ну вообще интерфейсу SPI наличие подтяжек фиолетово, потому как это не I2C, он КМОП-уровнями общается. Они нужны там, где при включении питания нужно жёстко задать какой-либо уровень, и именно в этот первоначальный момент, когда все устройства находятся в "состоянии когнитивного диссонанса". :)


Спасибо за ответ!
а как тогда объяснить явление когда выдернул провода MISO -MOSI, идущие от платы MB501 (Master), уровень восстановился в единицу, а втыкаешь обратно в плату Миландр - уровень садится в ноль? Настройка SPI: фаза=0, полярность=0, Моторола, перемычки все снял, порты проинициализированы без внутренней подтяжки и без открытого стока с двух сторон.


Ну, я всего лишь схемотехник, а по программной части наверняка разработчики попросят исходник, т.к они ж не "настрадал предсказамус" :)
Наверняка где-то что-то не включено, например тактирование, или инициализация выставлена неправильно или просто что-то где-то забыто.
Ведь поскольку SPI общается КМОП-уровнями, то Вы даже без подключённой SLAVE-платы должны от MASTER-а видеть запрос осциллографом, т.е пачку импульсов в соответствии с алгоритмом Вашего ПО.

_________________
"В радиотехнике, как в церкви - многое не понятно, но приходится верить"
ВлГУ. к.т.н Садовский Н.В


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по SPI
СообщениеДобавлено: 2016-фев-24 23:14 
Не в сети

Зарегистрирован: 2015-янв-27 13:32
Сообщения: 28
HEMAH писал(а):
Ну, я всего лишь схемотехник, а по программной части наверняка разработчики попросят исходник, т.к они ж не "настрадал предсказамус" :)
Наверняка где-то что-то не включено, например тактирование, или инициализация выставлена неправильно или просто что-то где-то забыто.
Ведь поскольку SPI общается КМОП-уровнями, то Вы даже без подключённой SLAVE-платы должны от MASTER-а видеть запрос осциллографом, т.е пачку импульсов в соответствии с алгоритмом Вашего ПО.


Нет, пачки идут и клоки бегают, но вот беда случается, когда соединяются две платы, подозреваю что из за подтяжек. когда открытый сток и pull up ставлю, тогда данные идут как то инверсно, с завалом передних фронтов. Ладно, завтра на работе выложу исходники. :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по SPI
СообщениеДобавлено: 2016-фев-25 08:12 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1141
Откуда: Тула
asket писал(а):
беда случается, когда соединяются две платы

Проверьте всё же схемотехнику:
  • наличие общего провода,
  • правильность соединения MISO and MOSI (что не работают выход-на-выход, плюс тут надо же
  • один настроить slave, другой мастер),
  • наличие сигнала SS (типа чипселекта),
  • наличие сигнала на этом чипселекте,
  • загляните в эррата по этому поводу (были траблы как раз с аппаратным чипселектом)
В остальном посмотрите настройки портов и модуля SSP, в части клока и PORT->PWR = 0xFFFF;

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по SPI
СообщениеДобавлено: 2016-фев-25 11:27 
Не в сети

Зарегистрирован: 2015-янв-27 13:32
Сообщения: 28
Скажите, а правильно ли, что вывод SSP1_TXD на мастере соединяется с выводом SSP1_TXD на SLAVE (PC5-PC5), SSP1_RXD <->SSP1_RXD (PC6-PC6), или все таки наоборот?
Я по принципу MOSI->MOSI, MISO->MISO.


Последний раз редактировалось asket 2016-фев-25 17:19, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по SPI
СообщениеДобавлено: 2016-фев-25 11:47 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1141
Откуда: Тула
asket писал(а):
Скажите, а правильно ли, что вывод SSP1_TXD на мастере соединяется с выводом SSP1_TXD на SLAVE (PC5-PC5), SSP1_RXD <->SSP1_RXD (PC6-PC6), или все таки наоборот?
Я по принципу MOSI->MOSI, MISO->MISO.

Вот по логике TXD на мастере соединяется с RXD на ведомом и эта цепь называется MOSI.
Аналогично и другая пара, которая мисо.

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: вопрос по SPI
СообщениеДобавлено: 2016-фев-25 12:39 
Не в сети
Аватара пользователя

Зарегистрирован: 2011-окт-19 17:25
Сообщения: 526
Откуда: г. Владимир ОАО "ВКБР"
asket писал(а):
Скажите, а правильно ли, что вывод SSP1_TXD на мастере соединяется с выводом SSP1_TXD на SLAVE (PC5-PC5), SSP1_RXD <->SSP1_RXD (PC6-PC6), или все таки наоборот?
Я по принципу MOSI->MOSI, MISO->MISO.


MOSI - это аббревиатура Master Output Slave Input, т.е ТХ Мастера соединяется с RX Слейва
MISO - это аббревиатура Master Input Slave Output, т.е RX мастера соединяется с TX Слейва.


Открыть оффтоп
Меня больше забавляет то, как бы звучали эти аббревиатуры русскими буквами:
Ведущий Выход Ведомый Вход
Ведомый Выход Ведущий Вход
))))))
Закрыть

_________________
"В радиотехнике, как в церкви - многое не понятно, но приходится верить"
ВлГУ. к.т.н Садовский Н.В


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 58 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB