Bricked 60D - no sign of life except for the SD card light with one ML card

Started by tjrobinson, September 23, 2014, 05:10:32 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

tjrobinson

Whilst using my Canon 60D (Firmware 1.1.1, ML 2.3) I noticed it had apparently frozen up. Unfortunately I can't remember exactly what I then did, but it was probably a good 30 seconds or more before I removed the battery and card. I've not been able to start it up again since. I was taking a 15 second exposure at the time, so didn't notice it had frozen immediately. I'm worried I may have fried it?

I'm seeing nothing at all on the rear screen, LCD display or in the viewfinder, no beeps or clicks, no smells.

The only sign of life I can get is with one of the cards I have Magic Lantern installed on - I get either a single flash when I insert the card or occasionally a double flash - it does this every time but only with that card. No other card does anything at any time. I originally copied Magic Lantern onto two identical 16GB cards. The other card (same version of ML, same card manufacturer) does nothing.

I've copied the contents of both onto my computer the only data difference I can see is that the card which causes a flash when inserted has the SETTINGS folder on it, and some photos. I've even tried copying the contents of the card that does cause a flash onto another card - but the second card won't cause a flash. Very weird.

I've tried the following:

tjrobinson

Configuration file, if it helps:

# Magic Lantern v2.3.60D.111 (7fee07c3b461+ (unified) tip)
# Built on 2012-07-23 16:06:13 by alex@thinkpad
# Configuration saved on 2014/09/21 21:38:39
menu.upside.down = 0
menu.first = 11835118
debug.timed-dump = 0
audio.monitoring = 1
audio.draw-meters = 2
audio.filters = 1
audio.input-choice = 4
audio.alc-enable = 0
audio.o2gain = 0
audio.lovl = 0
audio.mic-power = 1
audio.dgain.r = 0
audio.dgain.l = 0
audio.mgain = 4
buffer.warning.level = 70
bitrate.indicator = 0
time.indicator = 3
h264.bitrate-factor = 10
h264.bitrate-mode = 1
h264.qscale.plus16 = 8
lcd.adjust.position = 0
bmp.color.scheme = 4
preview.saturation = 1
preview.contrast = 3
arrows.bright_sat = 0
arrows.tv_av = 0
arrows.iso_kelvin = 1
arrows.audio = 1
arrows.set = 1
arrows.mode = 0
digital.zoom.shortcut = 1
swap.menu = 0
quick.review.allow.zoom = 0
halfshutter.sticky = 0
play.lv.button = 0
quick.delete = 0
play.set.wheel = 2
play.quick.zoom = 2
af.frame.autohide = 1
burst.auto.picquality = 0
dof.preview.sticky = 0
bv.needed.by.av = 0
bv.needed.by.tv = 0
bv.needed.by.iso = 0
crop.info = 0
movie.log = 0
shutter.display.degrees = 0
battery.drain.rate.rev = 209
display.dont.mirror = 1
lcdsensor.wakeup = 1
electronic.level = 0
defish.projection = 0
defish.preview = 0
idle.rec = 0
idle.display.gdraw_off.after = 0
idle.display.dim.after = 0
idle.display.turn_off.after = 0
spotmeter.position = 1
spotmeter.formula = 0
spotmeter.draw = 1
spotmeter.size = 5
clear.preview.mode = 0
clear.preview.delay = 1000
clear.preview = 0
vectorscope.draw = 0
waveform.bg = 38
waveform.size = 0
waveform.draw = 0
hist.log = 1
hist.warn = 3
hist.colorspace = 1
hist.draw = 1
focus.peaking.grayscale = 0
focus.peaking.color = 7
focus.peaking.thr = 5
focus.peaking.method = 1
focus.peaking = 0
zoom.overlay.split = 0
zoom.overlay.pos = 1
zoom.overlay.x = 1
zoom.overlay.size = 1
zoom.overlay.trig = 3
zoom.overlay = 0
falsecolor.palette = 0
falsecolor.draw = 0
crop.playback = 0
crop.movieonly = 0
crop.index = 0
crop.enable = 0
zebra.rec = 1
zebra.thr.lo = 0
zebra.thr.hi = 99
zebra.colorspace = 2
zebra.draw = 0
global.draw = 3
transparent.overlay.y = 0
transparent.overlay.x = 0
transparent.overlay = 0
disp.mode.x = 197
disp.mode.c = 1
disp.mode.b = 1
disp.mode.a = 1
disp.mode = 0
lv.disp.profiles = 0
bramp.calib.5 = 0
bramp.calib.4 = 0
bramp.calib.3 = 0
bramp.calib.2 = 0
bramp.calib.1 = 0
bramp.calib.0 = 0
bramp.calib.m1 = 0
bramp.calib.m2 = 0
bramp.calib.m3 = 0
bramp.calib.m4 = 0
bramp.calib.m5 = 0
bramp.calib.sig = 0
picstyle.rec = 0
picstyle.rec.sub = 1
bulb.ramping.manual.focus = 1000
bulb.ramping.manual.expo = 1000
bulb.ramping.percentile = 50
bulb.ramping.auto.speed = 100
bulb.ramping.auto = 1
bulb.ramping = 0
motion.trigger = 0
motion.release-level = 8
mlu.auto = 1
bulb.duration.index = 5
bulb.timer = 0
zoom.auto.exposure = 0
zoom.focus_ring = 0
zoom.halfshutter = 0
zoom.sharpen = 0
zoom.disable.x10 = 0
zoom.disable.x5 = 0
silent.pic.sweepdelay = 350
silent.pic.highres = 0
silent.pic.mode = 0
silent.pic = 0
lv_3rd_party_flash = 0
flash_and_no_flash = 0
audio.release-level = 10
focus.trap = 0
interval.stop_after = 0
interval.movie.duration.index = 2
interval.start.timer.index = 3
interval.timer.index = 10
hdr.scripts = 2
hdr.iso = 0
hdr.seq = 1
hdr.delay = 1
hdr.ev_spacing = 16
hdr.frames = 1
hdr.enabled = 0
iso_selection = 0
lvae.disp.gain = 0
lvae.iso.spd = 10
lvae.iso.max = 104
lvae.iso.min = 72
bv.av = 48
bv.tv = 111
bv.iso = 88
bv.auto = 0
rec.notify = 0
screen_layout.ext = 1
screen_layout.lcd = 0
shutter.lock.value = 0
shutter.lock = 0
enable-liveview = 1
movie.rec-key = 0
movie.mode-remap = 0
movie.restart = 0
wbs.ba = 100
wbs.gm = 100
wb.kelvin = 6500
hdmi.force.vga = 0
focus.patterns = 0
movie.af = 0
focus.follow.rev.v = 0
focus.follow.rev.h = 0
focus.follow.mode = 0
focus.follow = 0
focus.step = 5
focus.stack = 0
focus.rack.delay = 2
focus.wait = 1
focus.delay = 1
focus.stepsize = 2
fps.sound.disable = 1
fps.preset = 0
fps.timer.b.off = 1000
fps.timer.a.off = 1000
fps.override.idx = 10
fps.override = 0
hdrv.iso.b = 104
hdrv.iso.a = 72
hdrv.en = 0
digic.cartoon = 0
digic.swap-uv = 0
digic.negative = 0
digic.desaturate = 0
digic.black = 100
digic.iso.gain.photo = 1024
digic.iso.gain.movie = 1024

dmilligan

for the blink test and the other diagnostic tools to work, you need to have made the card "bootable" (if you reformatted the card, it is no longer bootable, if you never installed ML on the card, it is also not "bootable"), EOSCard and macboot utilities can do this for you.

QuoteI've even tried copying the contents of the card that does cause a flash onto another card - but the second card won't cause a flash. Very weird.
same reason as above, the card needs to be "bootable"

walter_schulz

Remove card (an empty one, preferable), remove battery, switch dial to M.
Insert card into cardreader, format card using NTFS or any other filesystem but not FAT (=FAT, FAT16, FAT32, FAT64/exFAT).
Insert card into cam, insert battery and startup.
Expected: Cam will tell you to format the card. Do so and restart.

Post results.

dmilligan

also, have you tried starting in C mode (with no card)?

you might have a bad property saved in NVRAM (see: http://wiki.magiclantern.fm/unbricking)

if you can get into the Canon menu in C mode, reset all camera settings

tjrobinson

Thanks for the suggestions.

Using EOScard to make it bootable, I can now get the LED blink test to work.

I've re-tried the Startup log a couple of times but there's no log file created on the card.

walter_schulz, I tried your steps but nothing happened. I wasn't prompted to format the card. I tried this in M and C modes.

dmilligan

Quote from: tjrobinson on September 23, 2014, 08:27:00 PM
Using EOScard to make it bootable, I can now get the LED blink test to work.
That's a good sign.

PM a1ex, he's pretty much the only person with enough expertise to help you from this point

tjrobinson

I'm working with a1ex over PM. There's been some progress - we've managed to get a ROM dump.


walter_schulz

Why someone local?
And if it is really neccessary: Why not telling your location?

dmilligan

Quote from: walter_schulz on September 26, 2014, 02:50:48 PM
Why someone local?
You need another camera to decode the messages. Though, I should think it might be possible simply record a video with a smartphone or webcam and post it, and let someone here decode it.

tjrobinson

Is anyone able to compile this for a 60D (1.1.1)? I'm a C# software developer but I'm a bit lost when it comes to C (and the related ecosystem).

I'm in Berkshire, England - if anyone happens to be nearby!

tjrobinson

Update: compilation problems now solved

I've got this far, what might cause this error?

tjrobinson@magiclantern:~/magic-lantern$ make
make -C  /home/tjrobinson/magic-lantern/platform/50D.109
make[1]: Entering directory `/home/tjrobinson/magic-lantern/platform/50D.109'
[ VERSION  ]   ../../platform/50D.109/version.bin
[ VERSION  ]   ../../platform/50D.109/version.c
[ CC       ]   version.o
make -C ../../tcc
make[2]: Entering directory `/home/tjrobinson/magic-lantern/tcc'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/home/tjrobinson/magic-lantern/tcc'
make[1]: *** No rule to make target `../../src/libs/dietlib-0.33-Os/dietlibc.a', needed by `strrchr.o'.  Stop.
make[1]: Leaving directory `/home/tjrobinson/magic-lantern/platform/50D.109'
make: *** [50D] Error 2


dmilligan

do a 'make clean' before 'make' and I recommend using a pre-built compiler if you're not already: https://launchpad.net/gcc-arm-embedded

tjrobinson

Update: compilation problems now solved

Thanks, I've got a bit further using that. Now onto this...

[ AR       ]   newlib-libc.a
[ CP       ]   newlib-libm.a
[ CP       ]   gcc-libgcc.a
[ LD       ]   magiclantern
debug.o: In function `stub_test_task':
debug.c:(.text+0x4530): undefined reference to `printf'
debug.c:(.text+0x4540): undefined reference to `printf'
debug.c:(.text+0x4564): undefined reference to `printf'
exmem.o: In function `_srm_malloc_suite':
exmem.c:(.text+0x650): undefined reference to `printf'
exmem.c:(.text+0x708): undefined reference to `printf'
exmem.o:exmem.c:(.text+0x7b0): more undefined references to `printf' follow
dm-spy.o: In function `debug_intercept':
dm-spy.c:(.text+0x178): undefined reference to `dm_spy_extra_install'
dm-spy.c:(.text+0x1a4): undefined reference to `dm_spy_extra_uninstall'
make[1]: *** [magiclantern] Error 1
make[1]: Leaving directory `/home/tjrobinson/magic-lantern/platform/60D.111'
make: *** [60D] Error 2


tjrobinson

Update: blink video available below

Ok, progress. I've finally built an autoexec.bin from the dm-spy-experiments branch. I get a solid light though, no blinking. Anything specific I should check?

tjrobinson

Branch: dm-spy-experiments
Revision: 11899
Changeset: 6caaf883e18f3745063ffd480ab37e4230275517 [6caaf883e18f]

Steps:

  • make clean
  • make
  • (inside platform/60D.111) make zip
  • copy zip contents to SD card
  • usual EOSCard.exe steps, remove battery, etc

Here's the Makefile.user I'm using under Cygwin on Windows:

# Supported camera models
SUPPORTED_MODELS:=60D

# Supported camera models for "UNIFIED" builds (Digic IV only)
SUPPORTED_UNIFIED_MODELS:=60D

# GCC-related stuff
# for yagarto or the official ARM toolchain use ARM_ABI=none-eabi otherwise use ARM_ABI=elf
ARM_ABI=none-eabi
GCC_VERSION=-4.8.4
ARM_PATH=/cygdrive/c/Progra~2/GNU/4.82014q3

# Intercept all DebugMsg's
CONFIG_DEBUG_INTERCEPT = y
CONFIG_DEBUG_INTERCEPT_STARTUP = y
CONFIG_DEBUG_INTERCEPT_STARTUP_BLINK = y

tjrobinson

Update: blink video available below

I've defined PRINT_EACH_MESSAGE in dm-spy.c and am now seeing some blinking - no sign of the 5 synchronization blinks, but something at last!

tjrobinson

Blink video, taken by a Canon compact camera in 240fps mode, 1/8th normal speed, (the only other camera I have access to at the moment):

https://www.dropbox.com/s/ceo3v2d3v6ovgmh/blinkvideo1.mov?dl=0

tjrobinson

I've watched the video a few times and tried to decode it manually, and it appears to just be showing the 0xA5 pattern five times - no actual debug messages.

tjrobinson


Walter Schulz


tjrobinson

Thanks, didn't realise it was his personal connection that was struggling.


Datadogie

Why does everyone suspect ML as the cause of a bricked camera. send it back to Canon.
T3i and Kiss X4 (550d (T2i)) Tamron 18-200mm, Sigma 28-70mm f2.8 (need firmware upgrade) Olympus 50mm f1.8  Olympus 28mm f2.8 and Olympus 24mm f2.8
Fancier 370 tripod and LCD hinged loupe. DIY Slider and crane.

tjrobinson

Because it had been working fine for years, then within a few minutes of using it with ML it froze up and never started again.

Why are you so convinced it's not ML?

a1ex

Diagnosed. The entire ROM0 was erased. The first 0x26000 bytes from ROM1 were erased (overwritten with garbage). ROM0 appears to be unused (this tricked me).

After 0x26000 bytes, ROM1 appears normal. Confirmed in QEMU: after replacing the first 0x26000 bytes from ROM1 with the ones from my 60D, ML is able to boot in the emulator.

The bootloader is OK (it's at the end of ROM1).

At this point I need help from g3gg0; it will need reflashing, but we never did that. I'm trying to understand the flash ROM routines here.

tjrobinson

I've got a video of the full startup LED blink sequence from an autoexec.bin a1ex sent me.

It was recorded at 1/8th speed (I think, might have been 1/4 speed) on a phone.

I've trimmed it and shrunk it down to about 24MB.

Would anyone you be able to see if they can deblink it?

https://www.dropbox.com/s/8kqc9ow674vf2gw/Note%20II%20Recording%20%28trimmed%20and%20resized%29.mp4?dl=0

Thanks,

Tom


Walter Schulz

Your problem has already been diagnosed ...
What do you expect? Second opinion?

tjrobinson

Walter,

Sorry, I have been speaking with a1ex over this issue for a number of weeks now and the latest information hasn't been posted here. His most recent post is now out of date.

Without going into too much detail, it turns out there is nothing wrong with ROM1 and the next step a1ex suggested was to use the deblink module to decode the startup messages, hence my previous post.

I don't have access to a camera to run the deblink module myself, so was hoping somebody might be able to attempt it remotely, by pointing their camera at the video I posted (see my previous message).

a1ex said he may be able to do this but hasn't replied for a while so I expect he is busy or away. I was hoping somebody else might be able to have a go so that I can send a1ex the additional diagnostic information.

Walter Schulz

Understood. Deblinking works right now.

EDIT: I think it didn't work as expected. Wild guess: Sync issues. May I ask where you're located?

tjrobinson

I'm based in Reading, England.

The video was recorded using my phone's slow-motion mode. It may not be great - if it's an unsuitable then I'll need to think of another plan.

angelsl

I wrote a little utility to deblink it programmatically, using ffmpeg to convert your video to frames and then detecting the LED blinks from there.

Here is the result. 8519 (8480 actual data) bits read from 53391 frames.

      init:ff071ffc:00:01: [PM] DisablePowerSave (Counter = 1)
      init:ff0122e4:8b:16:
K287 ICU Firmware Version 1.1.1 ( 3.3.7 )
      init:ff0122f8:8b:05:
ICU Release DateTime 2012.05.14 13:18:25
      init:ff02b744:00:03: [SEQ] CreateSequencer (Startup, Num = 6)
      init:ff02b994:00:02: [SEQ] NotifyComplete (Startup, Flag = 0x10000)
      init:ff02b9f8:00:03: [SEQ] NotifyComplete (Cur = 0, 0x10000, Flag = 0x10000)
   Startup:ff02b664:00:05: [SEQ] seqEventDispatch (Startup, 0)
   Startup:ff012624:8b:05: startupEntry
   Startup:ff1b9340:81:03: Initialize Adjective & Situation
   Startup:ff0125e4:8b:05: startupPropAdminMain : End
   Startup:ff02b994:00:02: [SEQ] NotifyComplete (Startup, Flag = 0x20000000)
   Startup:ff02b9f8:00:03: [SEQ] NotifyComplete (Cur = 1, 0x20000002, Flag = 0x20000000)
   Startup:ff071ffc:00:01: [PM] DisablePowerSave (Counter = 2)
   Startup:ff07206c:00:01: [PM] EnablePowerSave (Counter = 1)
**INT-50h*:ff071ffc: 0:01: [PM] DisablePowerSave (Counter = 2)
**INT-50h*:ff07206c:00:01: [PM] EnablePowerSave (Counter = 1)


The code I wrote, as well as the deblink result is here. There is a missing zero bit at index 0x647 that I added when converting to ASCII to get the result above. The corrected result is also there.


tjrobinson

angelsl, that's brilliant, thank you for doing this. Hopefully the output means something to somebody - fingers crossed.

With some help from a fellow ML user locally I managed to run the deblink module live, though the results don't look as good as what you've managed.

Here's a time-compressed video of the output:
https://www.youtube.com/watch?v=UAfnCgaSspU

I didn't have a chance to recompile the module with output to a text file enabled unfortunately :/ I have high quality stills of the final output but the video gets the general idea across.

I'll probably blog about the process properly soon, we had some camera inception going on!

a1ex

Great progress.

The log stops very early; a full log is much longer. Did the blinking stop all of a sudden?

For the live deblinker, can you double-check:
- frame rate (I've used 60fps in my tests)
- exposure (maybe increase the ISO?)
- ambient light (it helps if you can cover the two cameras with something)

tjrobinson

Alex,

The real duration was about 15 minutes. The light changed to a solid red after that time - we left it for a couple of minutes then stopped.

The framerate was 50fps - it was a 5D Mark 3 - does that do 60fps?

I'm not in a position to try this again for a while but can try adjusting the exposure and ambient light if we do it again. Is there anything else that would help? What's the best way of checking that the output is being decoded correctly? Readable text and no strange characters?

What do you make of the log from angelsl?

Quote from: angelsl on November 08, 2014, 08:07:11 PM
I wrote a little utility to deblink it programmatically, using ffmpeg to convert your video to frames and then detecting the LED blinks from there.

Here is the result. 8519 (8480 actual data) bits read from 53391 frames.

      init:ff071ffc:00:01: [PM] DisablePowerSave (Counter = 1)
      init:ff0122e4:8b:16:
K287 ICU Firmware Version 1.1.1 ( 3.3.7 )
      init:ff0122f8:8b:05:
ICU Release DateTime 2012.05.14 13:18:25
      init:ff02b744:00:03: [SEQ] CreateSequencer (Startup, Num = 6)
      init:ff02b994:00:02: [SEQ] NotifyComplete (Startup, Flag = 0x10000)
      init:ff02b9f8:00:03: [SEQ] NotifyComplete (Cur = 0, 0x10000, Flag = 0x10000)
   Startup:ff02b664:00:05: [SEQ] seqEventDispatch (Startup, 0)
   Startup:ff012624:8b:05: startupEntry
   Startup:ff1b9340:81:03: Initialize Adjective & Situation
   Startup:ff0125e4:8b:05: startupPropAdminMain : End
   Startup:ff02b994:00:02: [SEQ] NotifyComplete (Startup, Flag = 0x20000000)
   Startup:ff02b9f8:00:03: [SEQ] NotifyComplete (Cur = 1, 0x20000002, Flag = 0x20000000)
   Startup:ff071ffc:00:01: [PM] DisablePowerSave (Counter = 2)
   Startup:ff07206c:00:01: [PM] EnablePowerSave (Counter = 1)
**INT-50h*:ff071ffc: 0:01: [PM] DisablePowerSave (Counter = 2)
**INT-50h*:ff07206c:00:01: [PM] EnablePowerSave (Counter = 1)


The code I wrote, as well as the deblink result is here. There is a missing zero bit at index 0x647 that I added when converting to ASCII to get the result above. The corrected result is also there.



a1ex

Hm, after 15 minutes there might be a watchdog stopping the camera. I remember this problem when trying to figure out what happens when you start the camera with the main switch turned off (Canon code starts for a few seconds).

Possibilities:
- IIRC you said you can record at 240 fps - that is, we could blink a little faster
- you could hook a photodiode to a microcontroller, and blink much faster (I have the code for arduino)
- you could hook a photodiode to your soundcard input (instructions on CHDK wiki)
- we could check if we have file write access, to save the logs to the card
- if all else fails: skip the first 1000 bytes, and wait 15 minutes to get 1000 more bytes; repeat until finding the failure (binary search may help, because the logs are usually huge)

tjrobinson

My phone (Samsung Note II) can record in slow motion at 1/8 speed so in theory that's 240fps. I'm not sure whether it's actually capable of recording individual frames at 240fps though - there's probably some fakery going on as it is just a "toy" compared to proper cameras.

I've not got the skills/time for the microcontroller option though I could probably give the photodiode and soundcard a go.

A new autoexec.bin which attempts to write to a log file would be useful for sure.

How much bigger is a full log that the 15 minutes worth I've got so far?

The bigger question - is there anything specific we're looking for? An error message I assume? Could the blinker seek the log bytes looking for certain patterns perhaps?

a1ex

Yes, I'm looking for an error message, or the point where it stops logging (it locks up or whatever).

The blinker is slow - a short bit takes 3 frames, a short bit takes 6 frames (50fps), so a bit takes about 0.09 seconds. That is, a character is sent in 0.7 seconds. In 15 minutes you can send a little over 1000 characters - exactly what you've got.

angelsl

Quote from: tjrobinson on November 08, 2014, 10:51:30 PM
My phone (Samsung Note II) can record in slow motion at 1/8 speed so in theory that's 240fps. I'm not sure whether it's actually capable of recording individual frames at 240fps though - there's probably some fakery going on as it is just a "toy" compared to proper cameras.

That video you had was about 30 minutes at 29.97 fps, so if the real duration was 15 minutes then seems like it only recorded at 59.94 fps? Unless you sped up the footage when editing.

Anyhow, I'll be around if there's any way I can help. I can't seem to subscribe to this topic though.. (or any topic in the Using ML section).

tjrobinson

Thanks for your attempts to get things working again - much appreciated. Unfortunately I ran out of things I could try and there's only so long I could be without the camera so had to resort to paying for it to be repaired. Hopefully the stuff we tried will help somebody else out in future though.

tjrobinson

I've written my experiences up if anyone is interested. The blog post could do with some more detail in places but hopefully it's accurate and may be of interest/help to others in a similar situation.

http://www.tjrobinson.net/?p=171