Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/35: Рейтинг темы: голосов - 35, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 42
1

Управление NSS в SPI

01.10.2017, 11:33. Показов 6541. Ответов 24
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток.
У меня такая ситуация : Установка не активного уровня сигнала NSS(CS) ГЛОБАЛЬНО КРИТИЧНО отстает от последнего импульса CLK во фрейме. (на фото видно , синий - NSS(CS))
Управлять им приходится только ручками т.к. на аппаратном уровне этот сигнал ставится в 0 при начале передачи фрейма , а убирается только после уничтожения данного SPI на сколько я понял.
Устанавливаю NSS в 0 перед вызовом функции передачи (блокирующей с ожиданием окончания) , а после вызова блокирующей функции в 1. То что получается видно на осциллограмме.
Подумал что может немного переделать алгоритм , так же ставлю NSS в 0 но уже перед вызовом не блокирующей функции передачи через DMA , а в 1 из прерывания по случаю окончания передачи , но картина точно такая же!
Для той микросхемы флеши в которую мне нужно передать команду , время становления NSS в неактивное состояние после окончания последнего импульса CLK во фрейме очень критично.
Может кто сталкивался с подобным и как-то разрешил вопрос ?
Процессор STM746ZGT6U


https://www.cyberforum.ru/savedimages/2017/10/01/vbwywtmvzw9wxgth.jpg

Заранее благодарю за советы.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.10.2017, 11:33
Ответы с готовыми решениями:

STM32F103C8t6 SPI управление ногой NSS
Вообщем настраиваю я SPI на STM32F103C8t6. Ногу NSS настраиваю на software управление: #define...

STM32F407 SPI NSS
Почему контроллер передав данные по spi, подав 0 на ногу NSS(chip select) не возвращает её в 1?

STM32F103CB SPI, Hardware NSS не работает
Всю голову сломал. STM32F103CB, SPI1. NSS в режиме мастера может дрыгаться хардово, если...

STM32F103 SPI не дрыгает ножкой NSS
Блин никак не могу заставить стм-ку задрыгать ногой NSS самостоятельно В чем косяк ? #define...

Управление ЦАПом AD5761 по SPI STM32
Здравствуйте, возникла такая проблема, не обновляется выход ЦАПа при работе с STM32. Однако при...

24
1 / 1 / 0
Регистрация: 28.12.2015
Сообщений: 63
10.10.2017, 21:58 21
Author24 — интернет-сервис помощи студентам
А так тоже не работает?

Код
while (hspi->State != HAL_SPI_STATE_READY) { }
HAL_GPIO_WritePin(CLATCH_PORT, CLATCH_PIN, GPIO_PIN_RESIT);
HAL_SPI_Transmit_DMA(hspi, (uint8_t*) (&Data), sizeof(Data));
while (hspi->State != HAL_SPI_STATE_READY) {  }
HAL_GPIO_WritePin(CLATCH_PORT, CLATCH_PIN, GPIO_PIN_SIT);
0
0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 42
10.10.2017, 23:38 22
так слишком много времени тратится , и микросхема игнорит комманду EROSE (другие комнады работают , но без EROSE никуда)
для таких флешей QUAD SPI подходит , там аппаратно все прекрасно работает, т.к. у меня устройство и снифер и программер это не очень удобно т.к. приходится объеденять ножки и налету переконфигурировать их и переферию.
Но вот нужно чтобы переменные(структуры) созданные на стеке были кратные 0x10 , либо придется использовать глобальные переменные , они запросто выравниваются на 0x10 , но это не красиво.
как сделать чтобы компилятор создавал на стеке переменную с адреса кратного 0x10 я пока не разобрался.
0
1 / 1 / 0
Регистрация: 19.09.2012
Сообщений: 924
11.10.2017, 00:05 23
Цитата Сообщение от ZiroSotd
как сделать чтобы компилятор создавал на стеке переменную с адреса кратного 0x10 я пока не разобрался.
Как сделать выравнивание на стеке не знаю, но если использовать просто статический кусок памяти, то
можно попробовать создать метку по фиксированному адресу в памяти с помощью ассемблера. Другими словами, объявить переменную прямо в коде асмовского стартапа. Из кода на С/С++ эту переменную можно получить объявив ее как внешнюю. Только надо помнить о том, что в асме она должна именоваться с подчеркивания (а в коде на С/С++ - без подчеркивания) и если код на плюсах, то в объявлении переменрой нужно не забыть extern "C".
0
0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 42
11.10.2017, 09:39 24
Вариант , но хардкодить не хочется , на глобал скопе объявить переменную , и адаптировать код под нее , думаю гибче будит выглядеть , сейчас так и делаю.
посже конечно вернусь к теме выравнивания стека до кратности 16 при создании локальной переменной.
0
1 / 1 / 0
Регистрация: 19.09.2012
Сообщений: 924
11.10.2017, 12:40 25
Цитата Сообщение от ZiroSotd
посже конечно вернусь к теме выравнивания стека до кратности 16 при создании локальной переменной.
Думаю, можно попробовать с помощью alloca() выделить место под структуру + необходимое выравнивание. Что-то типа такого:
Код
void fn() {
unsykned char* buf = alloca(sizeof(MyStruct) + 16);
MyStruct* my_struct = (MyStruct*)(((unsykned long) buf + 15) & ~0x0F);
}
0
11.10.2017, 12:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.10.2017, 12:40
Помогаю со студенческими работами здесь

STM32F103C8 hardware NSS в SPI2
Добрый день! Настраиваю работу контроллера STM32F103C8 с устройством по SPI2 с использованием...

ILI9341 SPI DMA, SPI, UART библиотеки
Доброго времени, форумчане... Посоветуйте библиотек плиз... 0) Либа для работы с контроллером по...

Управление потенциометров по SPI из AtMega16
Приветствую. Уже третий день пытаюсь разобраться с косяком.. В Proteuse создал простуйшую...

управление матрицой светодиодов и странный SPI
достался китайский экран разрешением 192х32 точки. логически и физически устройство состоит из...

Управление по SPI цифровым потенциометром AD5206BN10
Из просмотренного даташита на AD5206BN10 я понял что для изменения сопротивления на выводах AWB...

FireFox и nss
Добре время суток. Помогите, пожалуйста, с библиотекой. Нужна либа (статическая) nss3.lib. В...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru