Миландр

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

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




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Ошибка процессора в режиме SPI SLAVE
СообщениеДобавлено: 2017-мар-03 15:16 
Не в сети
Аватара пользователя

Зарегистрирован: 2015-авг-28 11:25
Сообщения: 25
После ресета процессора и настройки SPI в режиме SLAVE, первое слово при передачи теряется. Ревизия процессора 1553. Для примера приложена осцилограмма, по MISO передаются два слова BB00 и BB01, вместо первого слова передаются нули. При повторных посылках ошибки нет.
Вложение:
TEK00000.BMP
TEK00000.BMP [ 329.12 КБ | Просмотров: 2390 ]


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2017-мар-04 18:15 
Не в сети
Аватара пользователя

Зарегистрирован: 2015-авг-28 11:25
Сообщения: 25
Проверялась ли работа модуля SPI процессора на частоте 144МГЦ и битовой частоты на SLAVE режиме 12МГЦ? Имею случайные ошибочки принятия битов по линии MISO при работе мастер и слэве устройств на одном и том же процессоре. На осцилограмме видно (по MOSI и MISO передаются одни и теже данные ), что установка линии MISO (Синяя) отстает на 4 такта CLK (144МГц) от синхросигнала (розовая) и линии МОSI. Занчит у драйвера есть 2 такта до семлирования по спаду синхросигнала. И по какой-то причине драйвер иногда семплирует неверный входной сигнал. Это ошибка процессора?


Вложения:
TEK00000.BMP
TEK00000.BMP [ 329.12 КБ | Просмотров: 2340 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2017-мар-07 15:36 
Не в сети

Зарегистрирован: 2017-фев-14 11:21
Сообщения: 96
Здравствуйте!
Для выяснения причины ошибки просим Вас отправить официальный запрос с указанием контактных данных на support@milandr.ru (http://milandr.ru/index.php?page=voprosy-i-otvety). Приложите, пожалуйста, к письму файлы с осциллограммами и параметрами настройки.
С уважением,
отдел технической поддержки АО "ПКК Миландр"

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2017-мар-07 21:47 
Не в сети
Аватара пользователя

Зарегистрирован: 2015-авг-28 11:25
Сообщения: 25
Мне это не совсем нужно, перешел на паралельную работу двух SPI в режиме мастер и меня это устраивает. Но, похоже, непорядок в процессоре.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2017-мар-09 12:54 
Не в сети

Зарегистрирован: 2017-фев-14 11:21
Сообщения: 96
Спасибо за замечания. Будем разбираться.

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2017-мар-29 11:13 
Не в сети

Зарегистрирован: 2015-ноя-05 10:50
Сообщения: 18
Подтверждаю вышеописанную проблему при работе SPI в режиме ведомого на высоких скоростях.
На осциллограмме в верхней части показаны сигналы CLK, CS, DATA.
В нижней части увеличенный масштаб. Наблюдается явный сдвиг линии данных.
Частота CLK = 10МГц.
Ревизия МК 1621.
Открыть
Вложение:
spi.png
spi.png [ 13.04 КБ | Просмотров: 2232 ]
Закрыть

Настройки тактирования
Открыть
Код:
void RST_CLK_Config(void)
{
   MDR_RST_CLK->PER_CLOCK = RST_CLK_PER_CLOCK_PCLK_EN_RST_CLK;

   MDR_RST_CLK->PER_CLOCK |= RST_CLK_PER_CLOCK_PCLK_EN_BKP;
   
   MDR_BKP->REG_0E &= ~(BKP_REG_0E_LOW_Msk | BKP_REG_0E_SELECTRI_Msk);
   MDR_BKP->REG_0E |= (7 << BKP_REG_0E_LOW_Pos) | (7 << BKP_REG_0E_SELECTRI_Pos);

   //HSE On, Oscillator mode; HSE2 On, Oscillator mode
   MDR_RST_CLK->HS_CONTROL = (1 << RST_CLK_HS_CONTROL_HSE_ON_Pos)  |
                                          (0 << RST_CLK_HS_CONTROL_HSE_BYP_Pos) |
                                          (1 << RST_CLK_HS_CONTROL_HSE_ON2_Pos) |
                                          (0 << RST_CLK_HS_CONTROL_HSE_BYP2_Pos);

   // Wait until HSE and HSE2 not ready
   while((MDR_RST_CLK->CLOCK_STATUS & RST_CLK_CLOCK_STATUS_HSE_ALL_RDY) == 0){};

   MDR_RST_CLK->CPU_CLOCK =
      (RST_CLK_CPU_CLOCK_CPU_C1_SEL_HSE << RST_CLK_CPU_CLOCK_CPU_C1_SEL_Pos) |
      (RST_CLK_CPU_CLOCK_CPU_C2_SEL_CPU_C1 << RST_CLK_CPU_CLOCK_CPU_C2_SEL_Pos) |
      (RST_CLK_CPU_CLOCK_CPU_C3_SEL_CPU_C2 << RST_CLK_CPU_CLOCK_CPU_C3_SEL_Pos) |
      (RST_CLK_CPU_CLOCK_HCLK_SEL_HSI << RST_CLK_CPU_CLOCK_HCLK_SEL_Pos);
      
   MDR_RST_CLK->PLL_CONTROL =
      (0 << RST_CLK_PLL_CONTROL_PLL_USB_ON_Pos)  |
      (0 << RST_CLK_PLL_CONTROL_PLL_USB_RLD_Pos) |
      (0 << RST_CLK_PLL_CONTROL_PLL_CPU_ON_Pos)  |
      (0 << RST_CLK_PLL_CONTROL_PLL_CPU_PLD_Pos) |
      (0 << RST_CLK_PLL_CONTROL_PLL_USB_MUL_Pos) |
      (15 << RST_CLK_PLL_CONTROL_PLL_CPU_MUL_Pos);
   
   SET_BIT(MDR_RST_CLK->PLL_CONTROL, RST_CLK_PLL_CONTROL_PLL_CPU_ON_Pos);
   
   SET_BIT(MDR_RST_CLK->PLL_CONTROL, RST_CLK_PLL_CONTROL_PLL_CPU_PLD_Pos);
   CLR_BIT(MDR_RST_CLK->PLL_CONTROL, RST_CLK_PLL_CONTROL_PLL_CPU_PLD_Pos);
   
   while ((MDR_RST_CLK->CLOCK_STATUS & RST_CLK_CLOCK_STATUS_PLL_CPU_RDY) == 0){};

   // EEPROM_CNTRL Clock enable   
   MDR_RST_CLK->PER_CLOCK |= RST_CLK_PER_CLOCK_PCLK_EN_EEPROM_CNTRL;
   MDR_EEPROM->CMD = (5 << EEPROM_CMD_DELAY_Pos);
   MDR_RST_CLK->PER_CLOCK &= ~RST_CLK_PER_CLOCK_PCLK_EN_EEPROM_CNTRL;

      // Выбираем для CPU_C1 - HSE; CPU_C2 - PLLCPU0;
   // CPU_C3 - CPU_C2; HCLK - CPU_C3
   MDR_RST_CLK->CPU_CLOCK =
      (RST_CLK_CPU_CLOCK_CPU_C1_SEL_HSE << RST_CLK_CPU_CLOCK_CPU_C1_SEL_Pos) |
      (RST_CLK_CPU_CLOCK_CPU_C2_SEL_PLL_CPU << RST_CLK_CPU_CLOCK_CPU_C2_SEL_Pos) |
      (RST_CLK_CPU_CLOCK_CPU_C3_SEL_CPU_C2 << RST_CLK_CPU_CLOCK_CPU_C3_SEL_Pos) |
      (RST_CLK_CPU_CLOCK_HCLK_SEL_CPU_C3 << RST_CLK_CPU_CLOCK_HCLK_SEL_Pos);
}
Закрыть


Настройки SPI
Открыть
Код:
void SSP2_Config(void)
{
   MDR_RST_CLK->PER_CLOCK |= RST_CLK_PER_CLOCK_PCLK_EN_SPI2;
   
   MDR_RST_CLK->SSP_CLOCK |= (1 << RST_CLK_SSP_CLOCK_SSP2_CLK_EN_Pos) |
                                          (RST_CLK_SSP_CLOCK_SSP_BRG_HCLK << RST_CLK_SSP_CLOCK_SSP2_BRG_Pos  );   
   
   
   MDR_SSP2->CR1 = 0;   //disable SSP2
   
   MDR_SSP2->CPSR = 12;
   
   // Baud rate = 128 MHz / ((0+1)*12) = 10.66 Mb/s, SPH = 1, SPO = 1, SCR = 0, SPI Motorola, 16 bit in word
   MDR_SSP2->CR0  |= (1 << SSP_CR0_SPH_Pos) | (1 << SSP_CR0_SPO_Pos) | (0 << SSP_CR0_SCR_Pos) |
                              (SSP_CR0_FRF_SPI_MOT << SSP_CR0_FRF_Pos) | (SSP_CR0_DSS_16_BITS << SSP_CR0_DSS_Pos);
   
   MDR_SSP2->CR1  |= SSP_CR1_MS;
   MDR_SSP2->CR1  |= SSP_CR1_SSE;
}
Закрыть


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

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


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

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


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

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