After some more searching in the LOG 0 I found this, maybe it's where the problem starts:
1.300.435 Fwrite:ff74c4dc:23:26: sdDMAWriteBlk: Transfer Block Size Invalid(4809<->6167)
1.300.462 Fwrite:ff74c540:23:06: sdDMAWriteBlk(SDSTS_ED)(0x2:0x8001:0x40:0x2)
Do you remember this error that causes the switch to 48 MHz, Canon has two registers for Transfer Block Size:
1- 0xC0C2007C2- 0xC0C20080There is a pattern, it starts with the first register (0xC0C2007C), it will set a value then the second register (0xC0C20080) will show up and will set a value which should be identical to the first register value, Now Canon compares the two values:
If it were identical --> Continue
If it weren't identical --> It breaks
From same LOG 0:
Register 0xC0C2007C set a value which is 0x1817 = 6167
1.639.620 Fwrite:ff74c410:MMIO : [0xC0C2007C] <- 0x00001817
Register 0xC0C20080 set a value which is 0x12C9 = 4809
1.300.233 **INT172h*:ff74c11c:MMIO : [0xC0C20080] -> 0x000012C9
Oh shit it's not identical, there is a problem:
1.300.435 Fwrite:ff74c4dc:23:26: sdDMAWriteBlk: Transfer Block Size Invalid(4809<->6167)
1.300.462 Fwrite:ff74c540:23:06: sdDMAWriteBlk(SDSTS_ED)(0x2:0x8001:0x40:0x2) ----------------------- what is this ?
Try the first register value?
1.300.732 Fwrite:ff74c7b4:23:26: sdWriteBlk: Retry:0 102694 6167
Then sdSoftReset( 0 )
In the normal situations the two registers is always identical, you may see LOG 1.
Now these registers represent Transfer Block Size at the current write speed ? I don't know what really it is (if someone can explain . . @a1ex we missed you), it doesn't have constant values, so how register one get it value, same for register two? and what makes register two has a different value, in short what is causing this ?
If it's okay to have two different values and if it not dangerous to have them we may patch the comparing process (ignoring it if this possible somehow), Or can we override them, if it's only reporting a values without effects on reading/writing process. We should find some informations about it before trying doing anything.