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

Старые песни о главном. SPI на STM32 и его Data size

Всех приветствую.

С проблемой и ее обходом через правильное обращение к регистру 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, Карл!. Я аж опешил, как так...

603926837_.thumb.png.542f2204cdc8837ec80d18fec7996b70.png

 

Пачка импульсов на 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, типа тут и тут читал, но у меня что-то новенькое...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В общем я как всегда =).

При работе с памятью приходится изменять фазу SPI (CPHA).

В ДШ черным по белому написано:
Prior to changing the CPOL/CPHA bits the SPI must be disabled by resetting the SPE bit.

Поправил этот момент и все стало работать как часы..

Остается неясным, правда, почему этот же код работает на WB55 серии. В ДШ у него такая же формулировка.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

что за память такая гжде надо менять параметры фазы? Не видал такого никогда...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да обычная ST spi eeprom https://www.st.com/en/memories/m93c66-w.html

Более того, я встречал массу другой spi памяти, работающей по такому же принципу...

Суть в том, что после команды на чтение память делает липовый бит и смещает фазу. Зачем - не знаю. Что есть, то есть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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