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

 
 
> Чтение STM32 из M25P64 по SPI при участии DMA, Как это правильно организовать?
011119xx
сообщение May 11 2011, 08:03
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 381
Регистрация: 5-07-05
Из: Уфа
Пользователь №: 6 544



Собственно говоря, что хочется понятно из названия темы. Уточню лишь, что хочу использовать SPI1 и судя по всему DMA1. В библиотеке периферии есть пример: SPI_RAM, но в нем используется 2 SPI, а мне бы только один хотелось. Как бы это сделать? Мои измышления привели к следующему порядку:
CODE
...
/* SPI_MASTER configuration ------------------------------------------------*/
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = CRCPolynomial;
SPI_Init(SPI_MASTER, &SPI_InitStructure);

/* SPI_MASTER_Rx_DMA_Channel configuration ---------------------------------*/
DMA_DeInit(SPI_MASTER_Rx_DMA_Channel);
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)SPI_MASTER_DR_Base;
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)SPI_MASTER_Buffer_Rx;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize = BufferSize;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(SPI_MASTER_Rx_DMA_Channel, &DMA_InitStructure);

/* SPI_MASTER_Tx_DMA_Channel configuration ---------------------------------*/
DMA_DeInit(SPI_MASTER_Tx_DMA_Channel);
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)SPI_MASTER_DR_Base;
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)SPI_MASTER_Buffer_Tx;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
DMA_InitStructure.DMA_Priority = DMA_Priority_Low;
DMA_Init(SPI_MASTER_Tx_DMA_Channel, &DMA_InitStructure);

/* Enable SPI_MASTER DMA Tx request */
SPI_I2S_DMACmd(SPI_MASTER, SPI_I2S_DMAReq_Tx, ENABLE);
/* Enable SPI_MASTER DMA Rx request */
SPI_I2S_DMACmd(SPI_MASTER, SPI_I2S_DMAReq_Rx, ENABLE);

/* Enable SPI_MASTER CRC calculation */
SPI_CalculateCRC(SPI_MASTER, ENABLE);

/* Enable SPI_MASTER */
SPI_Cmd(SPI_MASTER, ENABLE);

/* Enable DMA channels */
DMA_Cmd(SPI_MASTER_Rx_DMA_Channel, ENABLE);
DMA_Cmd(SPI_MASTER_Tx_DMA_Channel, ENABLE);

/* Transfer complete */
while(!DMA_GetFlagStatus(SPI_MASTER_Rx_DMA_FLAG));
while(!DMA_GetFlagStatus(SPI_MASTER_Tx_DMA_FLAG));

... а что дальше?


Сообщение отредактировал IgorKossak - Feb 1 2012, 11:56
Причина редактирования: [codebox]
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Valentin-k
сообщение Jan 31 2012, 17:04
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 27-01-12
Пользователь №: 69 923



а можно вопрос по теме!я вообще с флешками до этого не работал, а тут подключил к STM32 m25p64
все работает, записывает, читает...время записи совпадает с указанным в даташите...
но вот считывает информацию из памяти с той же скорость что и записывает - это правильно, мне коллеги говорят что чтение должно быть намного быстрее записи...с учетом что пины настроены на 50МГЦ...
ДМА не пробовал.
поэтому вопрос - возможно ли ускорить и вместо 400 мс на сектор, получить в районе 40-50 мс (при частоте 20МГЦ - по даташиту на флешку так написано)
и такой еще минивопросик - а обязательно при чтении постоянно слать Dummy byte, хотя без него чтение не происходит, но в том же даташите я не встречал чтобы писалось что перед каждым принимаемым байтом надо его отправлять...а в примерах - отправляют

Сообщение отредактировал Valentin-k - Jan 31 2012, 17:08
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 011119xx   Чтение STM32 из M25P64 по SPI при участии DMA   May 11 2011, 08:03
- - akimych   В примере 2 SPI используюются, т.к. они гоняют бай...   May 11 2011, 21:45
- - ISK2010   А я делаю так: 1) В фоне отправляю команду флэшке,...   May 13 2011, 04:13
- - 011119xx   А на код можно посмотреть?   May 13 2011, 05:37
|- - Danis   Цитата(Valentin-k @ Jan 31 2012, 21...   Jan 31 2012, 17:33
|- - DmitryM   Цитата(Valentin-k @ Jan 31 2012, 20...   Jan 31 2012, 18:36
- - Valentin-k   спасибо за разъяснение но маленькое уточнение, не ...   Jan 31 2012, 19:02
|- - DmitryM   Цитата(Valentin-k @ Jan 31 2012, 22...   Feb 1 2012, 03:46
|- - Danis   Цитата(Valentin-k @ Jan 31 2012, 23...   Feb 1 2012, 09:47
- - Valentin-k   осциллографом на шинах miso или mosi и clk.я через...   Feb 1 2012, 10:28
- - Valentin-k   снова вопрос:а может флешка не успеть сохранить? д...   Feb 2 2012, 11:48
- - Valentin-k   задам вопрос по другому! вот написан модуль у ...   Feb 2 2012, 15:03
- - 011119xx   Рекомендую проверить состояние битов защиты сектор...   Feb 3 2012, 04:55
- - Valentin-k   Цитата(011119xx @ Feb 3 2012, 08:55) Реко...   Feb 3 2012, 05:12
|- - Genadi Zawidowski   Цитата(Valentin-k @ Feb 3 2012, 09:1...   Feb 3 2012, 05:33
- - Valentin-k   я нули шлю,при чтении нужно тактирование делать,ну...   Feb 3 2012, 05:41
|- - DmitryM   Цитата(Valentin-k @ Feb 3 2012, 08:4...   Feb 3 2012, 08:44
- - Valentin-k   про команду я знаю и сейчас уже локализовался - по...   Feb 3 2012, 08:49
- - 011119xx   А канал DMA перестраивается или нет при попытке ус...   Feb 6 2012, 05:03
- - Valentin-k   в каком смысле перестраивается? я с битом разобрал...   Feb 6 2012, 20:22
- - Valentin-k   а может дело в флагах которые ставит дма,а я не сб...   Feb 7 2012, 07:34
- - smalcom   Плохо смотрю или Valentin-k действительно не прове...   Feb 25 2012, 08:17


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

 


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


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