|
|
  |
посоветуйте STM32 cortex M3, частота шины максимальная, SPI чтобы стабильно держал обещанные 16 МГц |
|
|
|
Feb 18 2013, 08:58
|

Гуру
     
Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591

|
Цитата(Метценгерштейн @ Feb 18 2013, 11:23)  потихоньку проясняется А у осц вход открыт? Может обрыв в SCK? Цитата буду пробовать на SPI2 А он же медленнее будет?
|
|
|
|
|
Feb 18 2013, 10:40
|
Знающий
   
Группа: Свой
Сообщений: 600
Регистрация: 27-05-05
Пользователь №: 5 482

|
QUOTE (Метценгерштейн @ Feb 18 2013, 14:23)  потихоньку проясняется  это SCK тут уже начали ошибки сыпаться. Выясняю, что еще сидит на данном пине. Пин на плате в данный момент ни к чему не подпаян. (штырек имеется ввиду) желательно посмотреть такую же осциллограмму с линией MISO на втором канале если меряете на ножке дискавери (pin20 header28 по схеме) и он не идет к вашей схеме, и там такое, тогда, 1. осциллограф - полосы пропускания достаточно? ограничение полосы отключено? режим выборки какой? 2. битый вывод проца 3. неправильная иницилизация GPIO - скорость GPIO правильно выставили? отладчиком глянтье состояние gpio на момент передачи. визуально осциллогамма выглядит, будто заряжается большая емкость или
|
|
|
|
|
Feb 18 2013, 10:59
|
Профессионал
    
Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079

|
инициализация портов и SPI Код RCC->AHBENR |= RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN; //Тактирование портов A, B //Линини SPI1 (Master) //PA12(MOSI), PA11(MISO), PA5(SCK), PA4(NSS) - AF, Push-Pull, AF5(SPI1) GPIOA->MODER |= GPIO_MODER_MODER12_1 | GPIO_MODER_MODER11_1 | GPIO_MODER_MODER5_1 | GPIO_MODER_MODER4_1; //Alternate function GPIOA->OTYPER &= ~(GPIO_OTYPER_OT_12 | GPIO_OTYPER_OT_11 | GPIO_OTYPER_OT_5 | GPIO_OTYPER_OT_4); //Push-Pull GPIOA->AFR[1] |= (5<<16 | 5<<12); //PA12 = AF5, PA11 = AF5 GPIOA->AFR[0] |= (5<<20 | 5<<16); //PA5 = AF5, PA4 = AF5
RCC->APB2ENR |= RCC_APB2ENR_SPI1EN; //Тактирование модуля SPI1 SPI1->CR2 = 0; SPI1->CR1 = 0 | 0 * SPI_CR1_BR_2 | 0 * SPI_CR1_BR_1 | 0 * SPI_CR1_BR_0 //Baud rate = Fpclk/2 | 0 * SPI_CR1_CPOL //Полярность тактового сигнала | 0 * SPI_CR1_CPHA //Фаза тактового сигнала | 0 * SPI_CR1_DFF //8 бит данных | 0 * SPI_CR1_LSBFIRST //MSB передается первым | 1 * SPI_CR1_SSM //Программный режим NSS | 1 * SPI_CR1_SSI //Аналогично состоянию, когда на входе NSS высокий уровень | 1 * SPI_CR1_MSTR //Режим Master | 1 * SPI_CR1_SPE; //Включаем SPI1 ; SPI1->CR2 = SPI_CR2_SSOE; //Вывод NSS - выход управления slave select осцилл 60 МГц. Никаких фильтров не включено. Хотя, фильтр больше 20 Мег отсекает. вывод MISO замкнут на MOSI и там картина нормальная- скачут биты и уровень и фронты- все четко. если частоты клоков снизить до 2 Мгц, то еще работает, но фронты начинают валиться. А на 1 Мгц- вообще все красиво по фронтам.
Сообщение отредактировал Метценгерштейн - Feb 18 2013, 11:00
|
|
|
|
|
Feb 18 2013, 11:16
|
Профессионал
    
Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886

|
Цитата(Метценгерштейн @ Feb 18 2013, 14:59)  инициализация портов и SPI Код RCC->AHBENR |= RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN; //Тактирование портов A, B //Линини SPI1 (Master) //PA12(MOSI), PA11(MISO), PA5(SCK), PA4(NSS) - AF, Push-Pull, AF5(SPI1) GPIOA->MODER |= GPIO_MODER_MODER12_1 | GPIO_MODER_MODER11_1 | GPIO_MODER_MODER5_1 | GPIO_MODER_MODER4_1; //Alternate function GPIOA->OTYPER &= ~(GPIO_OTYPER_OT_12 | GPIO_OTYPER_OT_11 | GPIO_OTYPER_OT_5 | GPIO_OTYPER_OT_4); //Push-Pull GPIOA->AFR[1] |= (5<<16 | 5<<12); //PA12 = AF5, PA11 = AF5 GPIOA->AFR[0] |= (5<<20 | 5<<16); //PA5 = AF5, PA4 = AF5 ...... Однозначно у вас не настроены порты на максимальную скорость. Проверил у себя на плате. Осциллограммы совпадают в вашим скриншотом. Попробуйте установить правильные значения в регистр GPIOA->OSPEEDR. P.S. Что-то типа: Код GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR11_0 | GPIO_OSPEEDER_OSPEEDR11_1 |GPIO_OSPEEDER_OSPEEDR12_0 | GPIO_OSPEEDER_OSPEEDR12_1 |GPIO_OSPEEDER_OSPEEDR5_0 | GPIO_OSPEEDER_OSPEEDR5_1 |GPIO_OSPEEDER_OSPEEDR4_0 | GPIO_OSPEEDER_OSPEEDR4_1;
|
|
|
|
|
Feb 18 2013, 11:47
|
Знающий
   
Группа: Свой
Сообщений: 600
Регистрация: 27-05-05
Пользователь №: 5 482

|
QUOTE (Метценгерштейн @ Feb 18 2013, 16:59)  инициализация портов и SPI [code] RCC->AHBENR |= RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN; //Тактирование портов A, B //Линини SPI1 (Master) //PA12(MOSI), PA11(MISO), PA5(SCK), PA4(NSS) - AF, Push-Pull, AF5(SPI1) GPIOA->MODER |= GPIO_MODER_MODER12_1 | GPIO_MODER_MODER11_1 | GPIO_MODER_MODER5_1 | GPIO_MODER_MODER4_1; //Alternate function GPIOA->OTYPER &= ~(GPIO_OTYPER_OT_12 | GPIO_OTYPER_OT_11 | GPIO_OTYPER_OT_5 | GPIO_OTYPER_OT_4); //Push-Pull GPIOA->AFR[1] |= (5<<16 | 5<<12); //PA12 = AF5, PA11 = AF5 GPIOA->AFR[0] |= (5<<20 | 5<<16); //PA5 = AF5, PA4 = AF5 я не знаю как регисты в иаре выглядят, надо установить GPIOA_OSPEEDR5 = 3;
|
|
|
|
|
Feb 18 2013, 11:58
|
Профессионал
    
Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079

|
щуп осцилла 1:10 пробую порты да! все четко! Фронты в норме. Код GPIOA->OSPEEDR |=GPIO_OSPEEDER_OSPEEDR5 | GPIO_OSPEEDER_OSPEEDR11 | GPIO_OSPEEDER_OSPEEDR12; //ноги 40 МГц а все 3 ноги надо 40 МГц выставить? MOSI MISO SCK ? или вход не надо? Как-то упустил совсем из виду это. Спасибо всем)
Сообщение отредактировал Метценгерштейн - Feb 18 2013, 11:59
|
|
|
|
|
Feb 18 2013, 12:32
|
Знающий
   
Группа: Свой
Сообщений: 600
Регистрация: 27-05-05
Пользователь №: 5 482

|
QUOTE (Метценгерштейн @ Feb 18 2013, 17:58)  а все 3 ноги надо 40 МГц выставить? MOSI MISO SCK ? или вход не надо?
Как-то упустил совсем из виду это. Спасибо всем) вход не надо, а MOSI и CS тоже надо так вроде уже писали про это, и в примерах приведенных было. и еще, если отдельную плату будете разводить, желательно последовательные резисторы 33-51Ом, чтоб звона не было и подтяжки 100кОм
|
|
|
|
|
Feb 18 2013, 12:54
|
Знающий
   
Группа: Свой
Сообщений: 600
Регистрация: 27-05-05
Пользователь №: 5 482

|
QUOTE (Метценгерштейн @ Feb 18 2013, 18:38)  а не будет из-за последоват. резисторов RC цепь на частотах? Для чего они? А подтяжки зачем? Програмных не достаточно? как раз и надо RC-фильтр чтоб звон погасить, мешать не будет, такие даже на DDR 400МГц стоят. а вот избежать трудноуловимых глюков помогут. подтяжки чтоб пока контроллер не загрузился (программные еще не включены), помехи чего попало куда попало не записали. как минимум на CS - обязательно, остальные по желанию. а если SD-карта на SPI, то строго обязательно - это культовое место посещения граблей
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|