RadiatoR 2 31 октября, 2021 Опубликовано 31 октября, 2021 · Жалоба Всех приветствую. С проблемой и ее обходом через правильное обращение к регистру SPIx->DR знаком и успешно использую. Правда сейчас появилась новая интересная проблема - завожу SPI eeprom K93C56 на STM32F334C8. Память аналогична другой подобного рода памяти и не вызывает вопросов, а вот проц, на удивление, вставил свои 5 копеек, причем ребром. Порядок работы с памятью такой: 1. Отправляем 11 бит (старт бит, опкод, адрес). 2. Устанавливаем CPHA 3. Читаем 8 бит (у меня так) 4. Возвращаем настройки на дефолт (8 бит, снимаем CPHA) 5. Profit У меня есть проект с STM32WB55..., там трудится аналогичная память MC93C66. SPI работает предсказуемо нормально с: *((volatile unsigned char *)&SPI1->DR) Но в 334 начиная со второго цикла чтения байта с памяти вместо 11 стартовых бит отправляется 19, Карл!. Я аж опешил, как так... Пачка импульсов на 19 бит появляется после выполнения команды SPI1->DR = data;// data - unsigned short Смотрел фифо, убеждался, что он пустой, перед отправкой читал регистр, в общем разные махинации не помогают... То есть я выполняю подряд команды: byte buf[16]; EEPROM::init(); EEPROM::read(0, &buf[0], 1);// 0 - addr, 1 - data size EEPROM::read(1, &buf[1], 1); EEPROM::read(2, &buf[2], 1); EEPROM::read(3, &buf[3], 1); И на второй команде вместо 11 стартовых бит он отправляет 19. На WB этот же код работает нормально. Догадка только одна - при отправке 8 бит в порт он их не удаляет из фифо, а выплевывает вместе со следующими 11 битами. Конечно, при отправке 8 бит в порт DS = 8bit и FRXTH установлен в 1. Есть у кого мысли в какую сторону можно копнуть? В еррате об этом ни слова нет, RM вычитывал, но ничего нового по этой проблеме для себя не почерпнул. PS. Темы с обсуждением горемычной пары STM и SPI, типа тут и тут читал, но у меня что-то новенькое... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RadiatoR 2 13 ноября, 2021 Опубликовано 13 ноября, 2021 · Жалоба В общем я как всегда =). При работе с памятью приходится изменять фазу SPI (CPHA). В ДШ черным по белому написано:Prior to changing the CPOL/CPHA bits the SPI must be disabled by resetting the SPE bit. Поправил этот момент и все стало работать как часы.. Остается неясным, правда, почему этот же код работает на WB55 серии. В ДШ у него такая же формулировка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 18 ноября, 2021 Опубликовано 18 ноября, 2021 · Жалоба что за память такая гжде надо менять параметры фазы? Не видал такого никогда... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RadiatoR 2 21 ноября, 2021 Опубликовано 21 ноября, 2021 · Жалоба Да обычная ST spi eeprom https://www.st.com/en/memories/m93c66-w.html Более того, я встречал массу другой spi памяти, работающей по такому же принципу... Суть в том, что после команды на чтение память делает липовый бит и смещает фазу. Зачем - не знаю. Что есть, то есть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться