Sergiocars 0 11 марта, 2014 Опубликовано 11 марта, 2014 · Жалоба Кто работал с этой памятью, может кто-нибудь что-нибудь посоветовать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zeal0t 0 12 марта, 2014 Опубликовано 12 марта, 2014 · Жалоба Если это Micron Serial NOR Flash Memory то работал с N25Q256 и N25Q512. Они подобные. По размеру отличаются только. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sergiocars 0 12 марта, 2014 Опубликовано 12 марта, 2014 · Жалоба Да оно! Не могу записать в память Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 12 марта, 2014 Опубликовано 12 марта, 2014 · Жалоба Да оно! Не могу записать в памятьИли что-то неправильно делаете, или память дохлая или процессор или замыкание на плате. Вероятнее всего первое. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zeal0t 0 12 марта, 2014 Опубликовано 12 марта, 2014 · Жалоба Подключена как? Extended SPI режим или полный? Если extended то проверить куда подключены ноги "Write protect" и "Hold". Чтение с нее выполняется? Если можно прочитать то: 1. читаем статус командой RDSR. 2. проверяем в ответе бит WEL - Write Enable 3. если он не выставлен - разрешаем запись через команду WREN Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Harvester 0 12 марта, 2014 Опубликовано 12 марта, 2014 · Жалоба Или что-то неправильно делаете, или память дохлая или процессор или замыкание на плате. Вероятнее всего первое. Также стоит проверить биты защиты BP0:3 в регистре состояния. Мне встречались модели NOR Flash, у которых по-умолчанию все сектора были защищены от записи Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sergiocars 0 12 марта, 2014 Опубликовано 12 марта, 2014 · Жалоба Если ничего не меняю изначально, то режим Extended SPI, так?!! Ноги подвешены к питанию VCC! Отсылаю команду 05h read status register, ответ 00h. Следовательно бит write enable =0. Делаю команду write enable 06h, опять читаю status register тоже самое 00h. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Harvester 0 12 марта, 2014 Опубликовано 12 марта, 2014 · Жалоба Если ничего не меняю изначально, то режим Extended SPI, так?!! Ноги подвешены к питанию VCC! Отсылаю команду 05h read status register, ответ 00h. Следовательно бит write enable =0. Делаю команду write enable 06h, опять читаю status register тоже самое 00h. Скорее всего, что-то не то в настрйках интерфейса. Добейтесь нормального ответа на команду Read Id. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sergiocars 0 12 марта, 2014 Опубликовано 12 марта, 2014 · Жалоба Если в status register = 00h, то и биты BP0:3 все равны нулю, так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zeal0t 0 12 марта, 2014 Опубликовано 12 марта, 2014 · Жалоба Если ничего не меняю изначально, то режим Extended SPI, так?!! Ноги подвешены к питанию VCC! Отсылаю команду 05h read status register, ответ 00h. Следовательно бит write enable =0. Делаю команду write enable 06h, опять читаю status register тоже самое 00h. ну причин много если даже чтения нет: - дохлый чип - неверно подключен - неверно инициализирован SPI на процессоре CS программный или аппаратный? посмотреть бы еще на инициализацию SPI В программе Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sergiocars 0 12 марта, 2014 Опубликовано 12 марта, 2014 · Жалоба При команде read id 9eh выдает : 00 c1 00 00 00 01 00 00 01 00 06 00 08 40 00 00 e0 00 00 00 при 9fh тоже самое выдает Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zeal0t 0 12 марта, 2014 Опубликовано 12 марта, 2014 · Жалоба При команде read id 9eh выдает : 00 c1 00 00 00 01 00 00 01 00 06 00 08 40 00 00 e0 00 00 00 при 9fh тоже самое выдает это, imho, кривой ответ. на основании DS ответ на эту команду от памяти должен начинаться так: 20h, BAh, 18h, ... т.е. надо начинать смотреть с подключения и инициализации SPI в программе Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Harvester 0 12 марта, 2014 Опубликовано 12 марта, 2014 · Жалоба При команде read id 9eh выдает : 00 c1 00 00 00 01 00 00 01 00 06 00 08 40 00 00 e0 00 00 00 при 9fh тоже самое выдает Ну вот видите, совсем не то что должно быть. Проверяйте настройки интерфейса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sergiocars 0 12 марта, 2014 Опубликовано 12 марта, 2014 (изменено) · Жалоба Инициализация порта: RCC->AHBENR |= RCC_AHBENR_GPIOBEN; //PB15(MOSI), PB14(MISO), PB13(SCK), PB12(NSS) - AF, Push-Pull, AF5(SPI1) GPIOB->MODER |= GPIO_MODER_MODER15_1 | GPIO_MODER_MODER14_1 | GPIO_MODER_MODER13_1 | GPIO_MODER_MODER12_1; //Alternate function GPIOB->OTYPER &= ~(GPIO_OTYPER_OT_15 | GPIO_OTYPER_OT_14 | GPIO_OTYPER_OT_13 | GPIO_OTYPER_OT_11); //Push-Pull GPIOB->AFR[1] |= (5<<28 | 5<<24 | 5<<20 | 5<<16); //PB15, PB14, P13, PB12 = AF5 Инициализация spi: RCC->APB1ENR |= RCC_APB1ENR_SPI2EN; // SPI2 SPI2->CR1 |= SPI_CR1_BR_2 | SPI_CR1_BR_0; //Baud rate SPI2->CR1 &= ~SPI_CR1_CPOL; // SPI2->CR1 &= ~SPI_CR1_CPHA; // SPI2->CR1 &= ~SPI_CR1_DFF; //8 SPI2->CR1 &= ~SPI_CR1_LSBFIRST; //MSB SPI2->CR1 |= SPI_CR1_SSM; // NSS SPI2->CR1 |= SPI_CR1_SSI; // SPI2->CR1 |= SPI_CR1_MSTR; // Master SPI2->CR1 |= SPI_CR1_SPE; // SPI2 enable Функция отправки байта: void spi_s(uint8_t data) { SPI2->DR = data; while(!(SPI2->SR & SPI_SR_TXE)); К примеру отсылка команды 06h: SPI2->CR2 |= SPI_CR2_SSOE; программно понижаю СS spi_s(0x06); отправляю 06h for (i=0;i<100;i++); небольшую задержку чтоб точно все успело уйти SPI2->CR2 &= ~SPI_CR2_SSOE; программно повышаю СS Изменено 12 марта, 2014 пользователем Sergiocars Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zeal0t 0 12 марта, 2014 Опубликовано 12 марта, 2014 · Жалоба Инициализация порта: SKIP Функция отправки байта: void spi_s(uint8_t data) { SPI2->DR = data; while(!(SPI2->SR & SPI_SR_TXE)); К примеру отсылка команды 06h: SPI2->CR2 |= SPI_CR2_SSOE; программно понижаю СS spi_s(0x06); отправляю 06h for (i=0;i<100;i++); небольшую задержку чтоб точно все успело уйти SPI2->CR2 &= ~SPI_CR2_SSOE; программно повышаю СS инициализация верно а вот передача/прием как то странно. не думаю что CS при такой инициализации будет верно работать. я инициализирую только MOSI,MISO,CLK ноги а CS дергаю сам как физическую и задержка не нужна если сделать вот так uint8_t spi_s(uint8_t data) { SPI2->DR = data; while (!(SPI2->SR & SPI_SR_RXNE)); return SPI2->DR; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться