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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> STM32F4Discovery SPI, сигнал CS, что-то пошло не так
Obam
сообщение Sep 9 2015, 13:56
Сообщение #16


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Запустите ядро ядро мегагерцах на 30-ти. Что будет?


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
rudy_b
сообщение Sep 9 2015, 13:58
Сообщение #17


Знающий
****

Группа: Свой
Сообщений: 888
Регистрация: 25-09-08
Из: Питер
Пользователь №: 40 458



Делитель (1/8) работает с клоками APB1. А есть еще делитель самих клоков APB1 относительно клоков проца (APB1_Prescaler), его тоже нужно знать.

А макисмальная частота APB1 - 30 Мгц, т.е. делитель - не менее 1/8. В результате общее деление, скорее всего, равно 1/64. Но это данные для Stm32F207, для F4 частота APB1 может и отличаться.
Go to the top of the page
 
+Quote Post
Obam
сообщение Sep 9 2015, 14:09
Сообщение #18


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Если уж исследовать, то не грех подтянуть частоту SPI к частоте ядра. Положим, ядро "затормозим", APB1_Prescaler=1 и fPCLK=4; вход\выход из подпрограмм занимает (нормально занимает) что-то, вот и будет видно как флаги в SPI успевают\не успевают к опросу. Надеюсь TS под JTAGом отлаживается?

Сообщение отредактировал Obam - Sep 9 2015, 14:11


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 10 2015, 02:56
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(ilkz @ Sep 9 2015, 17:28) *
Как вы выходите из положения?

Мы в такое положение не попадаем, так как всегда работаем с SPI через DMA или хотя-бы посредством прерываний. wink.gif
Чего и Вам советуем.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 10 2015, 04:43
Сообщение #20


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(ilkz @ Sep 9 2015, 15:49) *
Друзья, не могу понять в чем дело.

На эту тему уже было большое обсуждение.
Вкратце вывод таков: надо ждать RXNE, и потом ещё несколько тактов, в зависимости от скорости и режима SPI.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
ilkz
сообщение Sep 10 2015, 07:58
Сообщение #21


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

Группа: Участник
Сообщений: 135
Регистрация: 9-09-11
Пользователь №: 67 084



Ладно, с этм разберусь когда железяку запущу хоть как-то. Идея в целом понятна. По результатам дам знать. Спасибо за разжевывание )))

Пока что возник следующий проблем:
Что-то записываю в слейв, потом пытаюсь прочитать и... не вижу клока для чтения.
Код
void mcp_read(uint8_t addr) {
    GPIO_ResetBits(GPIOB, GPIO_Pin_11);
    spi2_send(0x41);
    spi2_send(addr);
    SPI_I2S_ReceiveData(SPI2);
    GPIO_SetBits(GPIOB, GPIO_Pin_11);
}

...

mcp_write(0x05, 0x20); // IOCON
mcp_write(0x00, 0x00); // IODIR
mcp_write(0x01, 0xA5); // IPOL
mcp_read(0x01); // IPOL


Я вижу что слейв что-то пытается выдать на свой SDO, но т.к. нет клока, то слейв обламывается и мой мастер ничего не принимает... Что за очередной бред? (Мы щас пока не трогаем всякие прерывания и прочие DMA).
Соответственно, никакие прерывания не дергаются.

Сообщение отредактировал ilkz - Sep 10 2015, 08:03
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Sep 10 2015, 08:57
Сообщение #22


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Потому что StdLib - ад и ужас.

Клок на шине выставляет мастер. Чтобы он это сделал, ему надо сказать "передавай". Этот StdLib так не делает, хотя, если судить только по названиям функций, должен.
Т.е. берём и делаем ОДНУ функцию
Код
    uint8_t Rw(uint8_t out = 0xFF)
    {
        SPIx->DR = out;
        while (!(SPIx->SR & SPI_SR_RXNE));
        return SPIx->DR;
    }

(украдено из Stm32tpl авторства AHTOXA)
и вызываем (сиплюсплюс):

Код
mcp.Active ();
mcp.Rw (0x41);
mcp.Rw (addr);
uint8_t res = mcp.Rw ();
mcp.Deactive ();
return res;


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
ilkz
сообщение Sep 11 2015, 06:30
Сообщение #23


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

Группа: Участник
Сообщений: 135
Регистрация: 9-09-11
Пользователь №: 67 084



Цитата(esaulenka @ Sep 10 2015, 11:57) *
Потому что StdLib - ад и ужас.

Клок на шине выставляет мастер. Чтобы он это сделал, ему надо сказать "передавай". Этот StdLib так не делает, хотя, если судить только по названиям функций, должен.
Т.е. берём и делаем ОДНУ функцию


Т.е., чтобы что-то прочитать - надо что-то записать. Люююто. А как быть, если нужно прочитать много байт, а слейв не допускает dummy-записей? Ну, то есть, во время записи dummy-слов слейв может на них как-то отреагировать, т.к. для него это будут команды какие-нибудь.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 11 2015, 06:40
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Ну тут надо немного подумать.
Как слейв узнает пишите вы или нетsm.gif? Клоки то чтобы данные забрать все равно идутsm.gif)))) Это же не РС232 где есть факт начала записи. Смотрите описание, там написано в каком состоянии нога должна быть
в 1 шлите FF, в 0 шлите 00, скорее всего там будет в состоянии пофиг....
Go to the top of the page
 
+Quote Post
Obam
сообщение Sep 11 2015, 07:04
Сообщение #25


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



"А как быть, если нужно прочитать много байт, а слейв не допускает dummy-записей?"

Тогда это не SPI: SCK тактируют одновременно и MOSI и MISO.


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
ilkz
сообщение Sep 11 2015, 07:41
Сообщение #26


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

Группа: Участник
Сообщений: 135
Регистрация: 9-09-11
Пользователь №: 67 084



Ну в принципе да, в командах всегда есть флаг R/W.
Go to the top of the page
 
+Quote Post
Obam
сообщение Sep 11 2015, 08:10
Сообщение #27


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



ilkz, попробуете замедлить ядро чтобы SPI успевал обновлять флаги к опросу?

Сообщение отредактировал Obam - Sep 11 2015, 08:12


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 11 2015, 08:30
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(AHTOXA @ Sep 10 2015, 10:43) *
Вкратце вывод таков: надо ждать RXNE, и потом ещё несколько тактов, в зависимости от скорости и режима SPI.

Жесть какая.... wacko.gif
Вот ответ на вопрос, почему я в своих проектах стараюсь не использовать STM32....
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Sep 11 2015, 09:02
Сообщение #29


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Напоминаю, что дождавшись RXNE надо обязательно прочитать DR, нужен он Вам или нет... И дуло исчезнет... И жести не будет.

Сообщение отредактировал Genadi Zawidowski - Sep 11 2015, 09:20
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 11 2015, 09:25
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Genadi Zawidowski @ Sep 11 2015, 15:02) *
Напоминаю, что дождавшись RXNE надо обязательно прочитать DR, нужен он Вам или нет... И дуло исчезнет... И жести не будет.

Думаете всё-таки рискнуть и применить в следующей (как раз намечающейся) разработке STM32? rolleyes.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 29th June 2025 - 11:31
Рейтинг@Mail.ru


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