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

 
 
> Чтение 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
сообщение Feb 3 2012, 05:41
Сообщение #2


Участник
*

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



я нули шлю,при чтении нужно тактирование делать,нулями и делаю. массив buffSPI_Tx у меня нулевой,только в его нулевой элемент записываю команду на чтение READ,а три следующие адрес,в данном случае нулевой.далее указываю буффер приема и передачи и включаю два канала...
по завершению передачи в buffSPI_Rx я имею страницу считанную из флеша(за исключением последних 4 байт,но это мелочь,буффер увеличить на 4 и всю страницу получу или както по другому-это не важно)-это все работает!проблема с записью...чую где то глупый косяк,да опыта мало еще с 32-х разрядными

Сообщение отредактировал Valentin-k - Feb 3 2012, 05:46
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Feb 3 2012, 08:44
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



Цитата(Valentin-k @ Feb 3 2012, 08:41) *
проблема с записью...чую где то глупый косяк,да опыта мало еще с 32-х разрядными

Ну вот, оказывается таки проблема с записью. А Вы учитываете что перед каждой записью нужно дать команду WREN и контроллировать WEL?

The Write Enable Latch (WEL) bit must be set prior to every Page Program (PP), Sector Erase (SE), Bulk Erase (BE) and Write Status Register (WRSR) instruction.
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
- - Valentin-k   а можно вопрос по теме!я вообще с флешками до ...   Jan 31 2012, 17:04
|- - 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, 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 Текстовая версия Сейчас: 1st September 2025 - 02:48
Рейтинг@Mail.ru


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