Você definitivamente desejará escolher uma camada de rede padrão. Eu já vi alguns casos em que as pessoas criaram seus próprios e, frequentemente, o protocolo é ineficiente e, no final, é uma perda de tempo. Uma camada de rede comprovada fornece funcionalidade básica para resolver a maioria dos problemas que você provavelmente enfrentará na rede com um dispositivo incorporado, o que economizará tempo e dinheiro preciosos no final.
Eu tenho familiaridade com o CANopen, então vou colocar uma explicação aqui e isso pode ajudá-lo a decidir se é esse o caminho que você deseja seguir. Se não se encaixa no que você precisa fazer, eu procuraria outra coisa.
O CANopen é muito centralizado em dados. Todos os nós escravos CANopen (itens que você controla a partir de um nó mestre, como sensores ou drivers de motor) fornecem um dicionário que contém todos os dados de configuração, controle e aquisição de dados que você precisa ler / gravar para realizar seu trabalho. Em seguida, você pode ler / gravar esses objetos individualmente através do mecanismo SDO (objeto de dados de serviço) ou ler / gravar esses objetos periodicamente em transmissões de mensagem CAN temporizadas através do mecanismo PDO (objeto de dados do produtor). A detecção de inicialização, desligamento, redefinição e pulsação / mau funcionamento do nó é fornecida pelos serviços NMT, bem como um serviço de atribuição de ID do nó (se você deseja usá-lo). Para implementar um dispositivo usando uma biblioteca CANOpen incorporada, você basicamente configura um dicionário de objetos, configura PDOs para enviar / receber atualizações de dados periodicamente, e escreva o código do usuário que se comporte com base nessas entradas de dados. Há outras coisas que o CANopen fornece, mas essa é a maior parte. Leia este livro para mais informações.