Hello,
I was digging into SD overclocking on DIGIC 4. let's start with
some info:
-I am still not quite sure which version of DIGIC 4 SD controller is based on, it's one of these:
1-
Physical Layer Specification v2.00 (introduced in 2006):
Doesn't support UHS-I mode and SDR modes, recommended rated frequency is 50 MHz (25MB/s), max frequency is 67 MHz.
In part two of layer specification v2.00 they mentioned it supports 1.8 Signaling.
Supports only SD and SDHC cards (up to 32 GB maximum).
1-
Physical Layer Specification v3.00 (introduced in 2009):
Here is the first interesting info, SDXC card capacity first introduced in Layer Specification version 3.00, and never mentioned in 2.00 version (both parts) . . and guess what, all DIGIC 4 models with SD interface support SDXC card capacity (source: Canon website).
Version 3.00 is used in all DIGIC 5 models (support UHS-I, SDR modes).

Photo source:
Part 1 Physical Layer Specification Ver3.01-
Finding overclocking registers on DIGIC 4:
In DIGIC 5 models there is a function which can toggle between the built in presets (24/48/96 MHz), calling this function works, and toggling between presets shows us which registers are changing.
Fortunately same function is also presented in DIGIC4 models, and from all LOGs I have captured (thanks Walter for help, my tests are done on 550D) + QEMU logs, the only register I could find and made sense is:
0xC0400004 (mentioned way back
here and
here)
Default value: 0x3000003 = 48 MHz (21MB/s), other values:
0x2000003 = 24 MHz (~11 MB/s)
0x1000003 = 16 MHz (~7 MB/s)
In Latest experiment I forced the register value to 0x4000003 which resulted in invalid benchmarks/clock speed:
Write 97.0 MB/s
Read 4946.8 MB/s
Write 5019.6 MB/s
Read 4970.8 MB/s
I see this as good sign, we might find some valid values using trial and error.
It might be some kind of ratio in this register value, between the left and right numbers . . Well, since I don't have DIGIC 4 camera, I want you (DIGIC 4 users) to test for example 0x3000002 and 0x3000001 . . run card benchmarks after each tweak, any difference?
-
How to test:
-First let's make sure if we are overriding 0xC0400004 correctly:
-Install an
iso-research build
-Download
patch_ap.mo , copy it to ML/modules folder in your SD card
-Load bench.mo and patch_ap.mo modules, you will find "Apply patch" setting showed in "Debug" tab
-From "Apply patch" submenu you can set a value for this register, the default one is 0x3000003
-Change the value to 0x2000003 --> click on "Apply patch" --> run card benchmarks, it should give you 10.7/11.0 w/r speeds, if that happen that mean the override is working, if not, well I need to find another way to override this register --> Let me know
-You can see 0xC0400004 value by enabling "Print 0xC0400004 value" from "Apply patch" submenu, it will print it on screen, you can disable this while running card benchmarks, turn it on to make sure if the new value is applied
-Now once again set value to 0x1000003 --> click on "Apply patch" --> run benchmarks it should give you 7/7.1 w/r speeds (just to make sure once again if the overriding is working)
-Time for trial and error values, firstly please test these values:
0x0000003
0x4000003
0x5000003
0x6000003
0x7000003
0x8000003
Any change in speeds?
Secondly, these ones:
0x3000004
0x3000002
0x3000001
0x3000000
0x2000002
-If the benchmarks showed not realistic numbers (+5000 MB/s) during your tests, perform a camera restart before continuing testing other values.
-Do this test and run benchmarks in Photo mode (none-LiveView)
-Report back, all DIGIC 4 cameras with SD interface can do the test (60D/550D/600D/1100D).
-I am expecting max of 25 MB/s (maybe a little higher) at a certain value.
-Do it on your own risk!
-This test might break your SD card or SD card controller
-
TO DO:
DIGIC 4 models doesn't include Voltage switch function in their ROMs, it's required to enable 1.8 Signaling and UHS-I mode, I think this could be implemented via sdSendCommand function.