МОЖЕТ получить случайно, временно не работает - PullRequest
0 голосов
/ 11 декабря 2018

Я использую MK60FX512VMD15 процессор для моего master и использую CAN шину для связи со скоростью передачи данных 1Mbps.

Во время последовательности мигания ведущий связывается с ведомым в очень простом порядке:

ведущий отправляет PROGRAM THIS DATA
d0 06 ef 4e 6a d1 94 4e

и раб ответы SUCCESS
ff

повторяется тысячи раз

148.5361 1 7fe                    Rx d 8 d0 06 43 56 d9 08 7d f1 
148.5363 1 7ff                    Rx d 1 ff                      
148.5368 1 7fe                    Rx d 8 d0 06 92 76 a9 e6 55 88 
148.5370 1 7ff                    Rx d 1 ff                      
148.5376 1 7fe                    Rx d 8 d0 06 4b 4b 8e e7 a5 7c 
148.5378 1 7ff                    Rx d 1 ff                      
148.5402 1 7fe                    Rx d 8 d0 06 79 d3 27 6b 94 27 
148.5404 1 7ff                    Rx d 1 ff                      
148.5409 1 7fe                    Rx d 8 d0 06 76 de 49 b5 02 d9 
148.5410 1 7ff                    Rx d 1 ff                      
148.5416 1 7fe                    Rx d 8 d0 06 ca 81 f1 9a 61 73 
148.5418 1 7ff                    Rx d 1 ff                      
148.5423 1 7fe                    Rx d 8 d0 06 35 7c af eb 7d df 
148.5425 1 7ff                    Rx d 1 ff                      
148.5431 1 7fe                    Rx d 8 d0 06 13 56 29 4c bb 82 
148.5433 1 7ff                    Rx d 1 ff                      
148.5438 1 7fe                    Rx d 8 d0 06 ce 18 61 06 ca d6 
148.5439 1 7ff                    Rx d 1 ff                      

ПРОБЛЕМА

В подавляющем большинстве попыток перепрошивки проблем нет.Но, время от времени, ведущий не получит раб SUCCESS aka 0xFF.

Я имею в виду, что получательпрерывание на master не сработает, даже если контроллер + трансивер master делает ACK сообщение на физическом уровне CAN.

Для устранения этой проблемы яувеличение counter_prg в прерывании Tx при отправке команды PROGRAM и увеличение counter_ack в прерывании Rx при получении 0xFF.

Когда тайм-аут случается из-за отсутствия ожидаемого 0xFF, на уровне sw приложения достигается точка останова, и я вижу, что counter_prg != counter_ack то есть counter_ack = counter_prg - 1 , хотя я могу видеть 0xFF ведомого на шине иконтроллер + приемопередатчик ACKS на физическом уровне

На этой шине CAN нет другого трафика.

ВОПРОС

Возможные причинытам для этого происходит?

Я также буду признателен за любые стратегии отладки.

...