Здравствуйте! Столкнулся с такой проблемой, при которой в одном проекте enc28j60 отвечает нормально (проект на микроконтроллере stm32f407), а в других уже отправляет какие-то непонятные сигналы, которые похожи на то, что линия miso просто отключается периодически. Пока не могу привести свою осциллограмму, но на другом форуме нашел точно такую же проблему, осциллограмму с которого и привожу. Самое непонятное то, что на плате disco stm32F407 все нормально, а на плате с stm32g030 и с stm32f051 какой-то ужас. Передачу по spi проверил осциллографом и анализатором, и они показывают все отлично, данные передаются и отправляются от одного spi к другому без проблем и искажений. Так же с питанием для enc тоже все нормально. Наверно, я делаю что-то неправильно уже в самих функциях для работы с enc28j60.
Там с землей точно все нормально?
@aveal По stm32f051 и stm32g030 уверенности нет, а вот у disco уверен, что все норм. Но у stm32f051 и stm32g030 сам spi работает, я проверял по байту данные, идущие одновременно по линии miso и mosi от одного spi к другому. Хотя, наверно, проблемы появляются при соединении земли модуля enc28 с землей платы stm32f051 или stm32g030
@rodion-2 А I2C при этом инициализируется?
Я с этими МК тоже горя хапнул.
@aveal На форуме в разделе всяких глюков я описывал проблему, что после инициализации I2C остальная периферия работает как то странно. Именно на этом МК.
Может у него тоже он инициализируется для чего нибудь. А потом всё пропадает.
@aveal Да, каюсь. Глаз замылило.
а на плате с stm32g030 и с stm32f051 какой-то ужас.
G030 имеет то же ядро. Только с приставкой +
Может глюки перешли и туда?
Если + то удвоенные? 🤣
@aveal Да, каюсь. Глаз замылило.
а на плате с stm32g030 и с stm32f051 какой-то ужас.
G030 имеет то же ядро. Только с приставкой +
Может глюки перешли и туда?
Если + то удвоенные? 🤣
Не знаю, не знаю... но не исключено 😆
Нашел решение проблемы. Дело было в том, что CS отключался до окончания приема байта, поэтому на линии MISO всегда были странные сигналы, похожие на то, что микроконтроллер просто отключает ножку. Я добавил перед каждым переключением CS отправку пустого байта, и enc стал возвращать правильные данные при обращении к управляющим регистрам.
Но непонятно, почему при обращении к регистру EREVID enc возвращает 0. Не знаю должно ли это быть так, но при записи данных в какой-то из управляющих регистров он возвращает все правильно.
А CS кто управляет?
Собственный код или чужая библиотека?
Может просто переключать CS после полного обмена информацией. Когда уже обмен полностью закончен.
А передавать лишний байт не выход.
Может будет достаточно мониторить флаг BSY и только тогда принимать решение о переключении CS.
@eduard Попробовал только с просмотром флагов, но только с флагам ничего не работает, а вот с отправкой пустого байта работает.
CS я переключаю в собственном коде
Давайте код.
Что то здесь не так.