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

 
 
 
Reply to this topicStart new topic
> STM32 SPI в HAL прыгает CS, Управление в STM32 сигналом CS аппаратно
Pasa
сообщение Jul 14 2016, 19:56
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 4-03-09
Из: Беларусь, Минск
Пользователь №: 45 665



Всем доброго времени суток.

1.
Недавно решил освоить STM32(STM32F051). Нужно управлять через SPI девайсом CC2500.
Девайс требует одного CS на несколько байт . В библиотеке HAL функции приема передачи после каждого байта снимают CS. Пришлось CS ставить на программное ручное управление.
Можно как-то заставить HAL не дергать CS для передачи паравоза из нескольких байт?

2.
И еще...такой вопрос неопытного....
В IAR прошиваю контроллер через Jetlink, запускаю отладку - программа крутиться.
А если отсоединить Jetlink и просто подать питание на контрлллер, то ничего не запускается....
Как прошить из IAR программу в контроллер чтобы она там сама крутилась после подачи питания без всяких внешних подключений?

Go to the top of the page
 
+Quote Post
Lagman
сообщение Jul 14 2016, 20:39
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Цитата(Pasa @ Jul 14 2016, 22:56) *
Можно как-то заставить HAL не дергать CS для передачи паравоза из нескольких байт?

А какой командой вы записываете паровоз байт?
Go to the top of the page
 
+Quote Post
Pasa
сообщение Jul 14 2016, 20:42
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 4-03-09
Из: Беларусь, Минск
Пользователь №: 45 665



Цитата(Lagman @ Jul 15 2016, 00:09) *
А какой командой вы записываете паровоз байт?

HAL_SPI_TransmitReceive(&hspi1, (uint8_t*)&tx_byte[0], (uint8_t*)&rx_byte[0], 2, 10000)
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Jul 15 2016, 09:42
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



Цитата(Pasa @ Jul 15 2016, 00:56) *
Всем доброго времени суток.

1.
Недавно решил освоить STM32(STM32F051). Нужно управлять через SPI девайсом CC2500.
Девайс требует одного CS на несколько байт . В библиотеке HAL функции приема передачи после каждого байта снимают CS. Пришлось CS ставить на программное ручное управление.
Можно как-то заставить HAL не дергать CS для передачи паравоза из нескольких байт?


регистр SPIx_CR2 битик NSSP взведите
Go to the top of the page
 
+Quote Post
Pasa
сообщение Jul 15 2016, 19:08
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 4-03-09
Из: Беларусь, Минск
Пользователь №: 45 665



Цитата(nanorobot @ Jul 15 2016, 13:12) *
регистр SPIx_CR2 битик NSSP взведите


Так это само в HAL-библиотеке делается.

В СubeMX при ините hspi в файле spi.c :

hspi1.Init.NSS = SPI_NSS_HARD_OUTPUT; //(SPI_NSS_HARD_OUTPUT = 0x0004 0000;)

И уже на нижнем уровне в stm32f0xx_hal_spi.c прописывается в CR2 бит SSOE(ну или вы назвали его NSSP):

hspi->Instance->CR2 = (((hspi->Init.NSS >> 16) & SPI_CR2_SSOE) | hspi->Init.TIMode | hspi->Init.NSSPMode | hspi->Init.DataSize ) | frxth; //(SPI_CR2_SSOE = 4)

...но все равно попробовал руками ставить в CR2 бит 0x04......как и ожидал.....все равно CS скачет


Сообщение отредактировал Pasa - Jul 15 2016, 19:24
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Jul 15 2016, 21:36
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



Цитата(Pasa @ Jul 16 2016, 00:08) *
Так это само в HAL-библиотеке делается.

В СubeMX при ините hspi в файле spi.c :

hspi1.Init.NSS = SPI_NSS_HARD_OUTPUT; //(SPI_NSS_HARD_OUTPUT = 0x0004 0000;)

И уже на нижнем уровне в stm32f0xx_hal_spi.c прописывается в CR2 бит SSOE(ну или вы назвали его NSSP):

hspi->Instance->CR2 = (((hspi->Init.NSS >> 16) & SPI_CR2_SSOE) | hspi->Init.TIMode | hspi->Init.NSSPMode | hspi->Init.DataSize ) | frxth; //(SPI_CR2_SSOE = 4)

...но все равно попробовал руками ставить в CR2 бит 0x04......как и ожидал.....все равно CS скачет



NSSP и SSOE разные вещи, и если склероз мне не изменяет обе должны быть в 1. С кубом дела не имел, делал либо ручками, либо пользовал HAL из состава ChibiOS.
родные же СТМовские либы рядом с ним полное Г. (во всяком случае FWLibrary) думаю что и куб недалеко ушел.

Кстати я всегда использую SPI в связке с DMA. В этом случве работает именно так, как Вам надо. Возможно что только в этом случае, по другому использовать SPI / STM32 не приходилось. Еще могу добавить что такая фича SPI имеется на STM43F0x, и STM32F37x/ А вот STM32F40x, F41x, F20x, ее нет. Про более новые не в курсе

Сообщение отредактировал nanorobot - Jul 15 2016, 21:50
Go to the top of the page
 
+Quote Post
Pasa
сообщение Jul 16 2016, 08:17
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 4-03-09
Из: Беларусь, Минск
Пользователь №: 45 665





Цитата(nanorobot @ Jul 16 2016, 01:06) *
NSSP и SSOE разные вещи


в CR2 я просто других битов относящихся к аппаратной поддержке не нашел...и в него попадает именно бит,обозванный в HAL как SSOE( я выше кодом взятым из HAL описал как это реализовано)

В HAL для аппаратная поддержка реализуетсявот так :
hspi1.Init.NSS = SPI_NSS_HARD_OUTPUT;
hspi1.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;

Собственно только ими и можно игратья. Кубом они ставятся....но похоже что эффект получается именно из-за аппаратной реализации .

Go to the top of the page
 
+Quote Post
1113
сообщение Jul 16 2016, 08:33
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 604
Регистрация: 24-02-06
Из: Москва
Пользователь №: 14 658



Цитата(nanorobot @ Jul 15 2016, 12:42) *
регистр SPIx_CR2 битик NSSP взведите

разве всё с точностью не наоборот?

Цитата
27.5.11 NSS pulse mode
This mode is activated by the NSSP bit in the SPIx_CR2 register and it takes effect only if the SPI interface is configured as Motorola SPI master (FRF=0) with capture on the first edge (SPIx_CR1 CPHA = 0, CPOL setting is ignored). When activated, an NSS pulse is generated between two consecutive data frame transfers when NSS stays at high level for the duration of one clock period at least. This mode allows the slave to latch data. NSSP pulse mode is designed for applications with a single master-slave pair.

Цитата
Bit 3 NSSP: NSS pulse management
This bit is used in master mode only. it allow the SPI to generate an NSS pulse between two consecutive data when doing continuous transfers. In the case of a single data transfer, it forces the NSS pin high level after the transfer. It has no meaning if CPHA = ’1’, or FRF = ’1’.

0: No NSS pulse
1: NSS pulse generated

Note:
1. This bit must be written only when the SPI is disabled (SPE=0).
2. This bit is not used in I2S mode and SPI TI mode.
Go to the top of the page
 
+Quote Post
nanorobot
сообщение Jul 16 2016, 12:16
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503



Цитата(1113 @ Jul 16 2016, 13:33) *
разве всё с точностью не наоборот?


нет не наоборот, проверено практикой. Возможно я не помню некоторых нюансов, но четко помню что для меня, в свое время, это было весьма приятным сюрпризом, и обусловило в дальнейшем выбор чипов с ткой фичей. Только что сделал checkout проекта, где использовал эту фичу: NSSP = 1 Помню что без него имел одну из двух:
1. NSS = 0 в течении всего времени пока SPI разрешен (SPE = 1) кажется SSOE = 1 при этом
2. NSS уходил в ноль перед началом передачи и возвращался в 1 после окончания передачи каждого байта.

короче говоря поиграться надо этой парой битов, вернее всего даже одним битом SSOE при установленном NSSP. желательно при этом отказаться от куба, кто его знает, что он там втемную делает.


вообще то Вы заронили в меня сомнения... память вещь ненадежная. Три года прошло с тех пор. Короче отзываю свою стопудовую уверенность, но пост не стираю


да похоже Вы правы, Это просто для импульсного режима, что б не все время в нуле. А для группы байт вначале вручную сбрасывал НСС а после окончания ДМА - прерывание, и в нем устнавливал снова вручную. Сорри.

Сообщение отредактировал nanorobot - Jul 16 2016, 12:41
Go to the top of the page
 
+Quote Post
Pasa
сообщение Jul 18 2016, 19:15
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 4-03-09
Из: Беларусь, Минск
Пользователь №: 45 665



выходит, что избавится от "прыгания" CS на каждом байте в аппаратной реализации нельзя....
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 07:19
Рейтинг@Mail.ru


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