реклама на сайте
подробности

 
 
> STM32F105 и SPI, Добавьте ясности, пожалуйста
Still Enemy
сообщение Apr 14 2015, 12:25
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 29-01-15
Из: Нижний Новгород
Пользователь №: 84 817



Стоит задача работать с FlashMemory M25P128 по SPI1 с помощью STM32. Под SPI1 выделено только три пина: MOSI,MISO,SCK, которые висят PB с 3 по 5 пин(Remap запилен). Платой(разработка фирмы) не предусмотрен NSS, пин PA14 забит другим устройством, зато под NSS заведён пин PB6. Как необходимо настроить ноги SPI, чтобы всё работало?
Я представляю, что и с текущей конфигурацией платы можно сделать, но как?
Как я рассуждаю, читая Reference Manual: нужно заделать SSM=1 и SSI=1 в SPI_CR1 и SSOE = 0 в SPI_CR2. Запилить PB6 как обычный GPIO на выход и подавать на него лог ноль при обмене.
После этого начинаю углубляться в Reference Manual. Возникло дохера вопросов(некоторые не по теме, но всё же хотелось знать):
Цитата
NSS: Slave select. This is an optional pin to select a slave device. This pin acts as a ‘chip select’ to let the SPI master communicate with slaves individually and to avoid contention on the data lines.

Как с помощью одного пина то можно управлять индивидуально одним из нескольких слейвов?
Дальше интереснее:
Цитата
Software NSS management (SSM = 1)
The slave select information is driven internally by the value of the SSI bit in the SPI_CR1 register. The external NSS pin remains free for other application uses.

Прочитав пару десятков раз мануал и еще посмотрев вот сюда рассудил про себя, что всё же 2 варианта работы в режиме программного управления ногой NSS:
1) SSOE = 0, SSM = 1, SSI = 1. Тут включается режим "какбэ" мультимастер. Выставить SSI в ноль - значит вылет ошибки MODF с последующим понижением в рабы) Выдержка из мануала по этому поводу:
Цитата
25.3.10 Error flags
Master mode fault (MODF)
Master mode fault occurs when the master device has its NSS pin pulled low (in NSS hardware mode) or SSI bit low (in NSS software mode), this automatically sets the MODF bit.

2) SSOE = 0, SSM = 1, SSI = ?(SSI в этом случае видимо нахрен не нужен). Подтягиваем NSS мастера к питанию, а CS слейва к земле(это я увидел по картинке 238 в том же мануале). Тут не понятно, что делать с SSI.
Вот тут я уже не понимаю как в 1 варианте работать с слейвом, без подтягивания к земле CS слейва. И опять же вопрос по работе с несколькими слейвами тоже актуален.
Как же нужно настроить регистры SPI в моём случае? Это вообще реально?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Still Enemy
сообщение Apr 15 2015, 12:42
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 29-01-15
Из: Нижний Новгород
Пользователь №: 84 817



Что-то у меня никак не работает. Взял осциллограф, выставил PB6 в лог ноль, померил, нога CS в нуле. Отправляю через библиотечную функцию(STM HAL driver), ни на SCK ничего не подаётся, ни на Data Input памяти ничего нет. Я вообще хз, как с этой ***лой работать. В библиотечной функции отправки просто происходит присвоение отправляемых данных регистру SPI_DR, так что на неё нет смысла грешить.
Инициализация SPI происходит так:
CODE
hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_MASTER;
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi1.Init.NSS = SPI_NSS_SOFT;
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLED;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED;
HAL_SPI_Init(&hspi1);

Инициализация пинов вот так:
CODE
GPIO_InitTypeDef GPIO_InitStruct;

GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_MEDIUM;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

GPIO_InitStruct.Pin = GPIO_PIN_4;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

GPIO_InitStruct.Pin = GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_MEDIUM;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

GPIOB->BSRR = GPIO_PIN_6;

Куда копать, скажите, пожалуйста.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Still Enemy   STM32F105 и SPI   Apr 14 2015, 12:25
- - mcheb   Совершенно очевидно,что МК-мастер,флэш-слэйв. Поэт...   Apr 14 2015, 13:57
- - Сергей Борщ   Управляйте сигналом выборки памяти ногодрыгом. Апп...   Apr 14 2015, 13:58
|- - A. Fig Lee   Цитата(Сергей Борщ @ Apr 14 2015, 09:58) ...   Apr 14 2015, 15:08
- - Still Enemy   mcheb, спасибо, кэп, я спрашивал не про то. Серге...   Apr 14 2015, 17:56
- - uriy   ЦитатаA разве NSS работает не только на инпут в сл...   Apr 15 2015, 04:20
|- - Still Enemy   Цитата(uriy @ Apr 15 2015, 08:20) Тоже вс...   Apr 15 2015, 04:56
|- - Сергей Борщ   Цитата(uriy @ Apr 15 2015, 06:20) Тоже вс...   Apr 15 2015, 05:14
- - A. Fig Lee   A как вы тогда предлагаете угадывать, когда дергат...   Apr 15 2015, 10:20
- - A. Fig Lee   Посмотреть регистры, убедится, что они меняются. Е...   Apr 15 2015, 13:57
|- - Still Enemy   Цитата(A. Fig Lee @ Apr 15 2015, 17:57) П...   Apr 15 2015, 16:25
- - Still Enemy   В итоге оказалось, что не работала нога PB3. Сдела...   Apr 16 2015, 06:07
- - Still Enemy   Кароч ребят, вы не поверите. Дело оказалось в новы...   Apr 17 2015, 10:15
- - Сергей Борщ   Цитата(Still Enemy @ Apr 17 2015, 13:15) ...   Apr 17 2015, 14:53


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 12:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01362 секунд с 7
ELECTRONIX ©2004-2016