Перейти к содержанию
    

dorian-kv

Участник
  • Постов

    31
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные dorian-kv


  1. а можно вопрос по теме!я вообще с флешками до этого не работал, а тут подключил к STM32 m25p64

    все работает, записывает, читает...время записи совпадает с указанным в даташите...

    но вот считывает информацию из памяти с той же скорость что и записывает - это правильно, мне коллеги говорят что чтение должно быть намного быстрее записи...с учетом что пины настроены на 50МГЦ...

    ДМА не пробовал.

    поэтому вопрос - возможно ли ускорить и вместо 400 мс на сектор, получить в районе 40-50 мс (при частоте 20МГЦ - по даташиту на флешку так написано)

    и такой еще минивопросик - а обязательно при чтении постоянно слать Dummy byte, хотя без него чтение не происходит, но в том же даташите я не встречал чтобы писалось что перед каждым принимаемым байтом надо его отправлять...а в примерах - отправляют

  2. т.е. надо в режиме писать GPIO_Mode_AF_PP? но дело в том что я это пробовал

     

    а тактирование GPIO и AFIO включается в отдельно в начале проги,а тут дело в том что подобным образом сделано общение с АЦП через SPI2 и там работает

  3. вот текст инициализации....проверял несколько раз, да и при пошаговом поспроизведении по регистрам смотрел - вроде все верно

    //функция инициализации 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мб

  4. Здравствуйте!столкнулся тут с проблемой

    решил подключить к процу STM32F103 флешпамять внешнюю m25p64 на SPI3, т.к. остальные уже задействованы.

    но на этом SPI сидит еще и JTAG

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

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

    хотя использую стандартные функции по интерфейсу...

    может кто сталкивался?

×
×
  • Создать...