Salve, sto utilizzando una libreria che mi permette l'invio e la ricezione di dati con l'utilizzo di due moduli can bus. Il problema è che riesco ad inviare ciò che voglio ma ricevo in un formato standard deciso evidentemete dalla libreria, per esempio :
invio -------> 0200A000 e ricevo ------> 02000000....Si perde delle informazioni
Se parli del frame, potrebbe bastare forse modificare il file can.h:
...
/* CAN payload length and DLC definitions according to ISO 11898-1 */
#define CAN_MAX_DLC 8
#define CAN_MAX_DLEN 8
struct can_frame {
canid_t can_id; /* 32 bit CAN_ID + EFF/RTR/ERR flags */
__u8 can_dlc; /* frame payload length in byte (0 .. CAN_MAX_DLEN) */
__u8 data[CAN_MAX_DLEN] __attribute__((aligned(8)));
};
modificando la #define CAN_MAX_DLEN.
Ma per quanto ne so (ho iniziato a studiarmelo un poco visto che anche io ho un CANBUS Shield e volevo provare durante le ferie ad implementarmi un logger) lo standard è di 8 byte, forse tu stai usando CAN FD?
EDIT: e comunque dici che hai risolto, ma a me pare lo stesso problema in realtà...
Come fai a modificare la lunghezza? :o Il campo "data Field" è di 64 bit ed il campo "control Field" contiene 4 bit per indicare quanti bytes sono nel "dataField" con una codifica che permette da 0 a 8 bytes ...
docdoc:
EDIT: e comunque dici che hai risolto, ma a me pare lo stesso problema in realtà...
Ho risolto il problema relativo al fatto che se invio 4 byte ne arrivano 4 dall'altra parte. Il problema nasce se ne invio tipo 244#000000015D visualizzo solo i primi 8
Il chip MCP2515 e il suo datasheet parlano chiaro. Ci sono solo 4 bit per specificare il datalen, ma il massimo è 8 byte anche quando accendi tutti e 4 i bit (cioè 15).
Vedi pagina 22, Register 3-7.
Tieni conto che sulle auto già da un po di tempo (almeno da quando esistono i cortex M-0) lo stack CAN è interno alla MCU per cui il chip 2515 non serve più.
Maurotec:
Ci sono solo 4 bit per specificare il datalen, ma il massimo è 8 byte anche quando accendi tutti e 4 i bit (cioè 15).
Vedi pagina 22, Register 3-7.
Tieni conto che sulle auto già da un po di tempo (almeno da quando esistono i cortex M-0) lo stack CAN è interno alla MCU per cui il chip 2515 non serve più.
Una cosa che non mi è chiara. Il can bus "normale" ha un campo dati di massimo 8 byte, mentre il can bus fd utilizza un campo dati di massimo 64 byte. Entrambi i can bus hanno la possibilità di avere il campo identificatore sia da 11 bit che da 29 bit. Ora utilizzando lo shield e inviando delle informazioni del tipo 188#02000000 vuol dire che il campo dati , cioè il payload è di 8 byte ?