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

KamilSafin

Новичок
  • Постов

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

  • Посещение

Репутация

0 Обычный
  1. MOSI и MISO закольцовывал - все нормально, что отправляется, то и доходит Сейчас какая-то странная проблема - память как будто не стабильно работает, т.е. запускаю отладку один раз - все работает, пишется через 82h и читается через E8h, но иногда при запуске программа застревает в цикле проверки регистра статуса - память просто не выдает регистр, переменная равна 0. И работает память только при значении предделителя 8 (т.е. на 9 MHz), хотя при более низких частотах же тоже должна работать. Может это быть проблемой настройки SPI или подключения? Уже который день пытаюсь настроить нормально работу, но все в одних и тех же ошибках.
  2. Пытаюсь общаться по SPI с внешней флеш памятью at45db081 Инициализация SPI: void spi_init(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); port.GPIO_Mode = GPIO_Mode_AF_PP; port.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; port.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &port); port.GPIO_Mode = GPIO_Mode_Out_PP; port.GPIO_Pin = GPIO_Pin_4; port.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &port); SPI_StructInit(&spi); spi.SPI_Direction = SPI_Direction_2Lines_FullDuplex; spi.SPI_Mode = SPI_Mode_Master; spi.SPI_DataSize = SPI_DataSize_8b; spi.SPI_CPOL = SPI_CPOL_Low; spi.SPI_CPHA = SPI_CPHA_2Edge; spi.SPI_NSS = SPI_NSS_Soft; spi.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8; spi.SPI_FirstBit = SPI_FirstBit_MSB; spi.SPI_CRCPolynomial = 7; SPI_Init(SPI1, &spi); SPI_Cmd(SPI1, ENABLE); SPI_DataSizeConfig(SPI1, ENABLE); } отсылка и прием байта данных: uint8_t sendByte(uint8_t byteToSend) { while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET); SPI_I2S_SendData(SPI1, byteToSend); while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET); return (uint8_t)SPI_I2S_ReceiveData(SPI1); } В main пробую записать в начало памяти одну страницу данных (команда 0x85, три байта адреса и посылка), прочитать статусный регистр (команда 0xD7 - регистр читается, память не занята), а потом пробую читать с самого начала памяти (команда 0xE8, три байта адреса и 4 незначащих) - но принимаются одни и те же данные, независимого от того, что писал, т.е. это даже не прием данных: int main(void) { SetSysClockTo72(); spi_init(); uint8_t data= 0; GPIO_ResetBits(GPIOA, GPIO_Pin_4); data = sendByte(0x85); data = sendByte(0x00); data = sendByte(0x00); data = sendByte(0x00); for (int i = 0; i < 264; i++) { data = sendByte(0xEE); } GPIO_SetBits(GPIOA, GPIO_Pin_4); for (int i = 0; i < 1000; i++); GPIO_ResetBits(GPIOA, GPIO_Pin_4); sendByte(0xD7); data = sendByte(DUMMY); // чтение статусного регистра GPIO_SetBits(GPIOA, GPIO_Pin_4); GPIO_ResetBits(GPIOA, GPIO_Pin_4); sendByte(0xE8); sendByte(0x00); sendByte(0x00); sendByte(0x00); sendByte(0x00); sendByte(0x00); sendByte(0x00); sendByte(0x00); while(1) { data = sendByte(DUMMY); } } прием проверяю через debug в CooCox гугление и поиск по форуму не помогли, не могу найти видимо какую то глупую ошибку
×
×
  • Создать...