CAN communication design/definition between two or more devices
The CAN protocol itself handles the CRC checking and ACK checking so you don't have to bother about that.

First you need to define the IDs regarding the priority. On CAN bus the more dominant bit you have at the begining of your ID, the more important is your message. Indeed if two nodes try to send two differents messages for example 0x1FFC and 0X0FFC, the second one will be sent firstly because there are more dominant bits at the begining of the ID.

Next you need to know that you can send 0 to 8 octet of data in each message.

Regarding the applicative protocol it's pretty much everything you need  to look at.

The last but very important thing is at driver level, it is the repartition of the different segment.

The CAN bit is cut in Time Quantum (TQ) that you need to define.
After that the 4 segments are : the SYNC (1TQ) the propagation segment (0 to 8 TQ) the segment 1(0 to 8 TQ) and the segment 2(0 to 8TQ). You will find on ethernet how to define those segments if you don't know how to do it.

The sample point is between segment 1 and 2 and you need to place it around 75% of the bit.