dorian-kv
-
Постов
31 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные dorian-kv
-
-
маски я тоже выставил...правда в подробности не вдавался,по примеру смотрел
спасибо.
-
спасибо.оказалось все дело в настройке двух пинов было...просто когда до этого я их в альтернативный режим переводил я не делал ремап jtag,а после не пробовал.
сейчас все заработало
-
т.е. надо в режиме писать GPIO_Mode_AF_PP? но дело в том что я это пробовал
а тактирование GPIO и AFIO включается в отдельно в начале проги,а тут дело в том что подобным образом сделано общение с АЦП через SPI2 и там работает
-
вот текст инициализации....проверял несколько раз, да и при пошаговом поспроизведении по регистрам смотрел - вроде все верно
//функция инициализации SPI /* Includes ------------------------------------------------------------------*/ #include "spi_flash.h" /* Private typedef -----------------------------------------------------------*/ #define SPI_FLASH_PageSize 0x100 //размер страницы /* Private define ------------------------------------------------------------*/ #define FLASH_ID 0x202017 #define WRITE 0x02 // Команда записи в память #define WRSR 0x01 // Команда записи регистра статуса #define WREN 0x06 // Команда разрешения на запись #define READ 0x03 // Команда чтения из памяти #define RDSR 0x05 // Команда чтения регистра статуса #define RDID 0x9F // Команда чтения идентификатора #define SE 0xD8 // Команда очистки сектора #define BE 0xC7 // Команда полной очистки #define WIP_Flag 0x01 // Write In Progress (WIP) flag #define Dummy_Byte 0xA5 #define SPI_port SPI3 __IO uint32_t FlashID_m25p64 = 0; uint8_t SPI_FLASH_Init(void) { SPI_InitTypeDef SPI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //выключаем JTAG, SW отстается включенным GPIO_InitStructure.GPIO_Pin = 3 | 5; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = 4; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = 12 | 15; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOG, &GPIO_InitStructure); RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE); SPI_FLASH_CS_HIGH();// отмена выбора памяти // RCC_APB1PeriphClockCmd(RCC_APB2Periph_SPInn, DISABLE); // конфигурация SPI3 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_8; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPI_port, &SPI_InitStructure); SPI_Cmd(SPI_port, ENABLE); // загрузка SPI3 FlashID_m25p64 = SPI_FLASH_ReadID(); //считываем идентификатор if(FlashID_m25p64==FLASH_ID) { return 1;//успешная проверка } else { return 0;//идентификатор не совпал } }
остальные функции не стал писать, они базовые
а проц STM32F103VG с 1мб
-
Здравствуйте!столкнулся тут с проблемой
решил подключить к процу STM32F103 флешпамять внешнюю m25p64 на SPI3, т.к. остальные уже задействованы.
но на этом SPI сидит еще и JTAG
я программно сделал ремап, отключив JTAG и оставив только SWD и на всякий случай убрал из жгута эти два проводка.
но SPI все равно не работает...по отладчику все проходит, флаги ставятся и т.п. но ничего не принимает...а когда я посмотрел осциллографом оказалось что физически работает только линия выборки CS которая программно сбрасывается и выставляется, на остальных выводах глухо
хотя использую стандартные функции по интерфейсу...
может кто сталкивался?
Чтение STM32 из M25P64 по SPI при участии DMA
в ARM
Опубликовано · Изменено пользователем Valentin-k · Пожаловаться
а можно вопрос по теме!я вообще с флешками до этого не работал, а тут подключил к STM32 m25p64
все работает, записывает, читает...время записи совпадает с указанным в даташите...
но вот считывает информацию из памяти с той же скорость что и записывает - это правильно, мне коллеги говорят что чтение должно быть намного быстрее записи...с учетом что пины настроены на 50МГЦ...
ДМА не пробовал.
поэтому вопрос - возможно ли ускорить и вместо 400 мс на сектор, получить в районе 40-50 мс (при частоте 20МГЦ - по даташиту на флешку так написано)
и такой еще минивопросик - а обязательно при чтении постоянно слать Dummy byte, хотя без него чтение не происходит, но в том же даташите я не встречал чтобы писалось что перед каждым принимаемым байтом надо его отправлять...а в примерах - отправляют