Cosa succede se due segmenti ID del nodo sono uguali?
Le reti CAN-bus non consentono a due nodi di avere lo stesso segmento ID in linea di principio, ma cosa succede se i due segmenti ID del nodo sono uguali?
Prima dell'esperimento, dobbiamo avere una chiara comprensione della struttura dei messaggi CAN e dei principi di arbitrato.
Innanzitutto, struttura dei messaggi CAN
Lo standard di rete CAN-bus più utilizzato è la versione V2.0. Questo standard è ulteriormente suddiviso in parti A e B. La loro principale differenza è la lunghezza del codice ID nell'area arbitrale. Tra questi CAN2.0A (frame standard) è ID 11 bit, CAN2.0B (espansione frame) è 29 bit ID. La seguente tabella 1 mostra la struttura del messaggio CAN:
Tabella 1 Struttura del messaggio CAN
| Nome fase | Fase di lunghezza / bit | Descrizione | |
| SOF | 1 | significa inizio della fase di dati e make up con un singolo bit dominante | |
| Fase di Abtrition | Telaio standard | 12 | Indica la priorità del frame, costituita da 11 indirizzi ID e 1 RTR |
| cornice estesa | 32 | Indica la priorità del frame, la composizione di 29 ID, SRR a 1 bit, IDE esteso e RTR | |
| Fase di controllo | 6 | indica il codice di gruppo e i bit riservati della lunghezza dei dati del segmento di dati | |
| Data Phase | 0 ~ 8 | contenuto di dati, la fase di controllo controlla la lunghezza dei dati | |
| CRC | 16 | controlla frame transimission erro, da SOF a data phase, tutto il contenuto, eccetto il riempimento di bit | |
| ACK | 2 | altro nodo conferma che questo frame sia ricevuto correttamente | |
| Frame End | 7 | significa la fine del telaio | |
In secondo luogo, il principio di arbitrato
L'arbitraggio CAN bus si basa su "linea e principio", come mostrato nella Figura 1. Quando un ricetrasmettitore emette segnali di diversi livelli allo stesso tempo, il livello recessivo è sempre coperto dal livello dominante. Durante l'invio del messaggio, il controller CAN monitorerà se lo stato del bus è uguale a quello inviato da solo. Se l'incoerenza si verifica nel segmento ID, si verificherà l'arbitrato. Se si verifica in altre aree, verrà attivato l'errore corrispondente.
Quello che segue è il punto chiave. Cosa succede se i due segmenti ID del nodo sono uguali? Abbiamo iniziato l'esperimento con due schede CAN e una CANScope. La scheda CAN simula il nodo standard CAN per inviare e ricevere messaggi e CANScope esegue il monitoraggio della comunicazione, come mostrato nella Figura 2.
Fig.2 Costruzione della piattaforma di sperimentazione
Terzo, sperimenta uno "Il segmento ID è lo stesso ma i dati sono diversi"
Una scheda CAN viene utilizzata per inviare un frame CAN con dati ID 000H a 01020304050607H e un'altra scheda CAN per inviare un frame CAN con dati 000H a 02020304050607H. I dati che CANScope ascolta sono mostrati in Fig. 3. Si può osservare che ci sono molti errori di compilazione dei campi di dati.

Fig.3 Campo dati fill erro
Perché è così? Prima otteniamo le forme d'onda corrispondenti ai due messaggi di trasmissione della scheda CAN, come mostrato nella Figura 4. Poiché il messaggio a due pin è un frame di dati standard e ogni frame contiene 8 byte di dati, le forme d'onda corrispondenti ai due frame di pacchetti sono esattamente lo stesso nei segmenti ID, RTR, IDE, R0 e DLC. Pertanto, il ruolo dell'arbitrato è inefficace e entrambi i nodi si considerano prioritari e continuano a inviare dati.
Ora ci concentriamo sul segmento di dati, i primi dati di byte sono gli stessi, sono 00H; i dati del secondo byte sono diversi, rispettivamente 01H, 02H. Le frecce in Figura 5 indicano che la logica dei bit corrispondenti è rispettivamente 0 e 1. In precedenza abbiamo menzionato che il nodo CAN rileverà se il livello del bus è uguale al livello inviato al momento dell'invio del messaggio. Se l'incoerenza si verifica nell'area non arbitraria, viene attivato l'errore corrispondente, quindi se i due frame vengono inviati al bus contemporaneamente, devono verificarsi errori di bit. Poiché il bit che invia un errore causerà al nodo di inviare 6 bit dominanti che violano la regola di riempimento (l'errore attivo distrugge i dati del frame), si verifica l'errore di riempimento del campo dati, come mostrato in FIG. 3.

Fig.5 Conflitti campo dati
In quarto luogo, esperimento due "gli stessi dati con lo stesso ID"
Allo stesso tempo, utilizzare due schede CAN per inviare frame CAN il cui ID è 000H su 01020304050607H e CANScope esegue il monitoraggio della comunicazione. Prima di tutto, non controlliamo l'opzione "risposta bus" per far funzionare CANScope in modalità solo ascolto. I risultati sperimentali sono mostrati in Figura 6, e il delimitatore di risposta è nel formato sbagliato.
Fig.6 Errore di formato del delimitatore di risposta
Perché succede? Il nodo che invia il messaggio invierà due bit recessivi nel segmento ACK. Se viene ricevuto un livello dominante durante il primo bit, il frame viene considerato correttamente ricevuto. Poiché i due arbitri pensano di aver ottenuto l'arbitrato giusto quando hanno lo stesso segmento arbitrale, aspettano una risposta nel segmento ACK, ma ci sono solo due nodi nella rete. Pertanto, nessuna risposta può essere ricevuta nel segmento ACK e si verifica un errore delimitatore di risposta. Semplicemente parlando, questa situazione è simile al fatto che solo un nodo nel bus non sarà in grado di inviare dati. La Figura 7 mostra il confronto della forma d'onda quando non c'è risposta nel segmento ACK.
Fig.7 Risposta ACK
Controlliamo la risposta del bus e ricominciamo l'esperimento (in questo momento ci sono 3 nodi nel bus). A questo punto, come mostrato in FIG. 8, i dati del bus vengono trasmessi e ricevuti normalmente.
Fig.8 Avvia risposta BUS
Riepilogo: quando due nodi inviano pacchetti con lo stesso ID e i dati allo stesso tempo, si verifica un errore di riempimento del campo dati. Quando due nodi inviano pacchetti con lo stesso ID e gli stessi dati, non si verifica alcun errore se altri nodi rispondono. Altri nodi hanno risposto con un errore di risposta. Pertanto, dovremmo evitare la stessa situazione nel segmento ID durante la progettazione del bus CAN.





