Problem is that it will fail on the CRC...
1. Is there a way to disable the CRC? is it a valid solution?
2. What other solution do you suggest?
Unless I am mistaken, when you make the same change it will always flip the same bits of the CRC.
Just to be sure I wasn't barking mad, I tested the idea in an online CRC calculator, using CRC P(x) = x^8+ x^5+ x^4+ x^0
Hex string => CRC
01000000 => 0x9b
02000000 => 0x07
So changing the first byte from 0x01 to x02 alters the CRC by 0x9C. I tested this a couple of times:
010F0F0F => 0x9D
020F0F0F => 0x01
01ABCDEF => 0xAA
02ABCDEF => 0x36
Likewise there is most probably a 'simple' way to combine the existing CRC with the CRC of the added data byte (most probably from a 256 entry table).
As a hint, if your initial values are all zeros
01ABCDEF has the same CRC as 0001ABCDEF which is the same as that of 000000000000000000000000000001ABCDEF
So to add 0x89 at the start of a CRC'ed data block it should be as easy as this:
* taking your data string (in this case ABCDEF)
* adding 0x00 to the front (the CRC shouldn't change if that is the only change in the packet).
* looking up the difference between the CRCs of 00000000 (which will be zeros!) and 89000000 (0x76).
As ABCDEF has a CRC of 0x31, I predict 89ABCDEF has a CRC of (0x76 xor 0x31) = 0x47... and indeed it does!