Проблема с MOSI на MCP2515 + ESP

pazyzy

New member
Всем привет.

Обнаружил проблему с MOSI при работе с контроллером MCP2515.
Проблема заключается в том что на MCP2515: не инициализируются регистры корректно. Но, как только я мультиметром меряю напряжение между MOSI и землей - все магическим образом начинает работать. Раньше MOSI была через 10k резистор привязан к питанию. Пробовал привязать к земле через резистор 56k. Не помогло.
Что меняется, когда я мультиметром меряю напряжение?

Теперь длинная версия.
Есть несколько прототипов девайсов для подключения к машине. Собраны одинаково. На борту ESP8266, MCP2515 и SD карточка. MCP и SD подключены к ESP по одной SPI шине.
Обраружил, что 2 из 5 прототипов не работают без вставленной SD карточки. Держатель SD карточки для разбирательства убрал. Все подтяжки SCK, MISO, MOSI убрал. Пытаясь найти различия в платах - обнаружил, что как только трогаю мультиметром MOSI и землю - все начинает работать. Осциллографа нет.

Есть какие-нибудь идеи, как найти причину?

Схемы нарисованной нет, но могу нарисовать, если нужно.

Спасибо.
 

nikolz

Well-known member
Всем привет.

Обнаружил проблему с MOSI при работе с контроллером MCP2515.
Проблема заключается в том что на MCP2515: не инициализируются регистры корректно. Но, как только я мультиметром меряю напряжение между MOSI и землей - все магическим образом начинает работать. Раньше MOSI была через 10k резистор привязан к питанию. Пробовал привязать к земле через резистор 56k. Не помогло.
Что меняется, когда я мультиметром меряю напряжение?

Теперь длинная версия.
Есть несколько прототипов девайсов для подключения к машине. Собраны одинаково. На борту ESP8266, MCP2515 и SD карточка. MCP и SD подключены к ESP по одной SPI шине.
Обраружил, что 2 из 5 прототипов не работают без вставленной SD карточки. Держатель SD карточки для разбирательства убрал. Все подтяжки SCK, MISO, MOSI убрал. Пытаясь найти различия в платах - обнаружил, что как только трогаю мультиметром MOSI и землю - все начинает работать. Осциллографа нет.

Есть какие-нибудь идеи, как найти причину?

Схемы нарисованной нет, но могу нарисовать, если нужно.

Спасибо.
к каким пинам вы подключили MCP
ESP8266 CAN Bus with MCP2515 | An Engineer's Blog
ESP8266 MCP2515 CAN Bus to Wifi Gateway | An Engineer's Blog
 
Последнее редактирование:

pazyzy

New member
Я использую готовый модуль Wemos D1 Pro. MCP питается от 5В.

CS - D8 - напрямую
MISO - D6 - через BSS138 для изменения логики
MOSI - D7 - напрямую.
SCK - D5 - напрямую
INT - D1 - через BSS138

Думал, что не хватает напряжения для логики MOSI, поэтому через BSS138 тоже пробовал. Результат такой же. С вольтметром также работает, если трогать ножку MCP.
Еще обнаружил, что все также магически работает, если вольтметром трогать ножку SCK.

Кстати, как только убираю вольтметр работать все перестает.
 
Последнее редактирование:

nikolz

Well-known member
Я использую готовый модуль Wemos D1 Pro. MCP питается от 5В.

CS - D8 - напрямую
MISO - D6 - через BSS138 для изменения логики
MOSI - D7 - напрямую.
SCK - D5 - напрямую
INT - D1 - через BSS138

Думал, что не хватает напряжения для логики MOSI, поэтому через BSS138 тоже пробовал. Результат такой же. С вольтметром также работает, если трогать ножку MCP.
Еще обнаружил, что все также магически работает, если вольтметром трогать ножку SCK.

Кстати, как только убираю вольтметр работать все перестает.
MCP2515 работает от 3.3 поэтому для начала можно выкинуть BSS138 и запитать ее от 3.3 на ESP
MCP2515: контроллер шины CAN с интерфейсом SPI | hardware | adminstuff
 

pazyzy

New member
MCP2515 работает от 3.3 поэтому для начала можно выкинуть BSS138 и запитать ее от 3.3 на ESP
MCP2515: контроллер шины CAN с интерфейсом SPI | hardware | adminstuff
На плате еще TJA1050, который связан с MCP2515. Ему нужно питание 5В.
Проверю логику их общения, и если пройдет, то запитаю MCP от 3.3В и подключу к SPI напрямую.

Вы думаете в этом может быть проблема? Ведь большинство девайсов работают как есть. Да и этот тоже работает, но только с SD карточкой (работал, пока я его не расковырял).

Есть идеи каким образом вольтметр влияет на SPI?
 

nikolz

Well-known member
На плате еще TJA1050, который связан с MCP2515. Ему нужно питание 5В.
Проверю логику их общения, и если пройдет, то запитаю MCP от 3.3В и подключу к SPI напрямую.

Вы думаете в этом может быть проблема? Ведь большинство девайсов работают как есть. Да и этот тоже работает, но только с SD карточкой (работал, пока я его не расковырял).

Есть идеи каким образом вольтметр влияет на SPI?
дайте ссылку на схему
я пока не думаю в чем проблема так как мало информации
я лишь предложил убрать то что вы нагородили сами
 

pazyzy

New member
Проверил логику связи MCP2515 при питании от 3.3В и TJA1050 при питании от 5В - все в порядке.
Не уверен только в одном пункте - уровнях TJA RXD pin.
В datasheet эти уровни написаны в Conditions, и это единственное место где я нашел что-нибудь об его уровнях (https://www.nxp.com/docs/en/data-sheet/TJA1050.pdf, страница 6, "Receiver data output (pin RXD)").

Переделал схему - все заработало.
Чуть позже нарисую схему, как было до этого - очень интересно выяснить, почему не работало. И почему это проявлялось не во всех случаях.


Подробности связи:
V(DD)=3.3V
MCP TXCAN V(OL) Max: 0.6V
MCP TXCAN V(OH) Min: V(DD)-0.7V=2.5V

MCP RXCAN V(IL): -0.3V to 0.15V(DD)=0.5V
MCP RXCAN V(IH): 2V to V(DD)+1=4.3V

V(CC)=5V
TJA TXD V(IL): -0.3V - 0.8V
TJA TXD V(IH): 2V to V(CC)+0.3V=5.3V

TJA RXD V(OL): 0.45V
TJA RXD V(OH): 0.7V(CC) = 3.5V
 

nikolz

Well-known member
Проверил логику связи MCP2515 при питании от 3.3В и TJA1050 при питании от 5В - все в порядке.
Не уверен только в одном пункте - уровнях TJA RXD pin.
В datasheet эти уровни написаны в Conditions, и это единственное место где я нашел что-нибудь об его уровнях (https://www.nxp.com/docs/en/data-sheet/TJA1050.pdf, страница 6, "Receiver data output (pin RXD)").

Переделал схему - все заработало.
Чуть позже нарисую схему, как было до этого - очень интересно выяснить, почему не работало. И почему это проявлялось не во всех случаях.


Подробности связи:
V(DD)=3.3V
MCP TXCAN V(OL) Max: 0.6V
MCP TXCAN V(OH) Min: V(DD)-0.7V=2.5V

MCP RXCAN V(IL): -0.3V to 0.15V(DD)=0.5V
MCP RXCAN V(IH): 2V to V(DD)+1=4.3V

V(CC)=5V
TJA TXD V(IL): -0.3V - 0.8V
TJA TXD V(IH): 2V to V(CC)+0.3V=5.3V

TJA RXD V(OL): 0.45V
TJA RXD V(OH): 0.7V(CC) = 3.5V
В документации TJA1050 написано:
• Input levels compatible with 3.3 V and 5 V devices
--------------------------------------
Transmitter data input (pin TXD)
VIH HIGH-level input voltage output recessive 2.0 − VCC + 0.3 V VIL
LOW-level input voltage output dominant −0.3 − +0.8 V
---------------------------
При VCC = 4.75 V to 5.25 V :
TXD High от 2 вольт до 5...5.5 в Low jn -0.3 до +0.8 в
-----------------------------
но VCC может быть и меньше
Предельные значения VCC supply voltage −0.3 +6 V
 

pazyzy

New member
Схема с использованием BSS138 (как было) в приложении.
На ней опущены TJA1050 и осциллятор.
Питание 3.3В используется с Wemos (там стоит ME6211)

Проблема - при отсутствии SD карточки в 20% случаев схема не работает.
with bss.png

Как стало - MCP2515 питается от 3.3V, убрал BSS138 и все резисторы вокруг них кроме R1 (чтобы MISO была подтянута к питанию когда карточки нет).
Тренировался на двух платах, которые не работали - все заработало.

Можете подсказать почему возникает проблема?

Спасибо.
 

Вложения

Последнее редактирование:

=AK=

New member
Но, как только я мультиметром меряю напряжение между MOSI и землей - все магическим образом начинает работать. Раньше MOSI была через 10k резистор привязан к питанию. Пробовал привязать к земле через резистор 56k. Не помогло.
Что меняется, когда я мультиметром меряю напряжение?
Емкость меняется. И, соответственно, добавляется небольшая задержка. Если мастер и слэйв SPI настроены на разные режимы работы, то добавочная задержка MOSI может сделать эту связку работоспособной.

Схема с использованием BSS138 (как было) в приложении.
А приложение где?
 

pazyzy

New member
А приложение где?
Картинка была в сообщение вставлена. Добавил еще как вложение.

Если мастер и слэйв SPI настроены на разные режимы работы, то добавочная задержка MOSI может сделать эту связку работоспособной.
Использую библиотеку для MCP от coryjfowler (coryjfowler/MCP_CAN_lib). При настройке там используется SPI_MODE0.
Программа используется одна и та же. На каких-то платах работает, на каких-то без вольтметра нет.
 

APJ

New member
Приветствую.
Проблема с MCP2515, не корректно распознаёт посылки. В приёме в терминал выводит вот это-
Setting Baudrate Successful!
MCP2515 Initialized Successfully!
MCP2515 Library Receive Example...
Standard ID: 0x%.3lX DLC: 496 Data: 0x%.2X 0x%.2X 0x%.2X 0x%.2X 0x%.2X 0x%.2X 0x%.2X 0x%.2X

Должно быть так-
Standard ID: 0x1F0 DLC: 8 Data: 0xFF 0x3F 0xFF 0x1F 0xFF 0x1F 0xFF 0x1F

Конвертер MCP2515 переделан на питание 3,3 + 5в. При подключении к ардуине нано всё работает с той же программой.
К есп плате соеденено так-
D4-CS
D6-SO
D7-SI
D5-SCK
D3-INT
Библиотека MCP от coryjfowler, пример receive от туда же.
Подскажите что может быть, свои мысли уже кончились(((

При настройке там используется SPI_MODE0.
Как это применить?
 

pazyzy

New member
Как это применить?
Это по умолчанию в файле mcp_can.cpp прописано при инициализации SPI: SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));

Опишите подробнее как работает и как не работает. Я только понял, что какая-то схема с нано работает, а что не работает - нет.
 

APJ

New member
C esp8266 никак не работает. При загрузке пишет что инициализация ок, при подключении к кан шине пишет в порт вот это.- Standard ID: 0x%.3lX DLC: 496 Data: 0x%.2X 0x%.2X 0x%.2X 0x%.2X 0x%.2X 0x%.2X 0x%.2X 0x%.2X

С чем это может быть связано?

Сам кан модуль в порядке, с наной работает правильно.
 
Последнее редактирование:

Сергей_Ф

Moderator
Команда форума
@APJ если с esp не работает ни в какую, то дело может быть в библиотеке. Дело в том что int для нано и esp это разные вещи. Так что может потребоваться адаптация библиотеки если дело в разной разрядности процессора.
Предположение, саму библиотеку не смотрел.
 

APJ

New member
если с esp не работает ни в какую, то дело может быть в библиотеке.
Использую библиотеку для MCP от coryjfowler (coryjfowler/MCP_CAN_lib). При настройке там используется SPI_MODE0.
Программа используется одна и та же. На каких-то платах работает, на каких-то без вольтметра нет.
Вроде как у людей работает
Пробовал навешивать резисторы и кондетсаторы на MOSI, толку нет.
 
Сверху Снизу