Sansa Clip+ : Add dualboot support for sansa clip+ to mkamsboot.
Dualboot works on the sansa clip+ by holding either the left "|<<" or home buttons. The USB pin is still undiscovered at this point and should replace the home button when found. By including the home button for dualboot we avoid bricking due to a single button failure. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@24561 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
dc3f746af2
commit
de3489a6c8
4 changed files with 43 additions and 17 deletions
|
@ -116,17 +116,21 @@ unsigned char dualboot_clipv2[272] = {
|
|||
0x01, 0x00, 0x83, 0xe2, 0x00, 0x20, 0xa0, 0xe3, 0x15, 0xff, 0x2f, 0xe1, 0x38, 0x00, 0x00, 0x00,
|
||||
0xff, 0xff, 0x0f, 0x00, 0x14, 0x00, 0x0f, 0xc8, 0x00, 0x00, 0x0b, 0xc8, 0x00, 0x00, 0x0e, 0xc8
|
||||
};
|
||||
unsigned char dualboot_clipplus[188] = {
|
||||
0xa8, 0xf0, 0x9f, 0xe5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
unsigned char dualboot_clipplus[256] = {
|
||||
0xe0, 0xf0, 0x9f, 0xe5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x1f, 0xe5, 0x20, 0x10, 0x1f, 0xe5,
|
||||
0x01, 0x20, 0x40, 0xe0, 0x68, 0x30, 0x9f, 0xe5, 0x01, 0x40, 0x50, 0xe4, 0x01, 0x40, 0x43, 0xe4,
|
||||
0x00, 0x00, 0x52, 0xe1, 0xfb, 0xff, 0xff, 0x1a, 0x02, 0x50, 0x83, 0xe2, 0x54, 0x00, 0x9f, 0xe5,
|
||||
0x00, 0x10, 0x90, 0xe5, 0x01, 0x18, 0x81, 0xe3, 0x00, 0x10, 0x80, 0xe5, 0x05, 0x06, 0xa0, 0xe3,
|
||||
0x01, 0x00, 0x50, 0xe2, 0xfd, 0xff, 0xff, 0x1a, 0x02, 0x00, 0x00, 0xea, 0x54, 0x00, 0x1f, 0xe5,
|
||||
0x54, 0x10, 0x1f, 0xe5, 0x01, 0x00, 0x00, 0xea, 0x68, 0x00, 0x1f, 0xe5, 0x68, 0x10, 0x1f, 0xe5,
|
||||
0x01, 0x40, 0x43, 0xe0, 0x01, 0x20, 0x50, 0xe4, 0x01, 0x20, 0x43, 0xe4, 0x04, 0x00, 0x53, 0xe1,
|
||||
0xfb, 0xff, 0xff, 0x1a, 0x01, 0x00, 0x83, 0xe2, 0x00, 0x20, 0xa0, 0xe3, 0x15, 0xff, 0x2f, 0xe1,
|
||||
0x38, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0f, 0x00, 0x14, 0x00, 0x0f, 0xc8
|
||||
0x01, 0x20, 0x40, 0xe0, 0xa0, 0x30, 0x9f, 0xe5, 0x01, 0x40, 0x50, 0xe4, 0x01, 0x40, 0x43, 0xe4,
|
||||
0x00, 0x00, 0x52, 0xe1, 0xfb, 0xff, 0xff, 0x1a, 0x02, 0x50, 0x83, 0xe2, 0x8c, 0x00, 0x9f, 0xe5,
|
||||
0x00, 0x10, 0x90, 0xe5, 0x01, 0x18, 0x81, 0xe3, 0x00, 0x10, 0x80, 0xe5, 0x80, 0x00, 0x9f, 0xe5,
|
||||
0x01, 0x10, 0xa0, 0xe3, 0x00, 0x14, 0x80, 0xe5, 0x04, 0x10, 0x80, 0xe5, 0x7d, 0x1f, 0xa0, 0xe3,
|
||||
0x01, 0x10, 0x51, 0xe2, 0xfd, 0xff, 0xff, 0x1a, 0x68, 0x00, 0x9f, 0xe5, 0x20, 0x10, 0x90, 0xe5,
|
||||
0x64, 0x00, 0x9f, 0xe5, 0x08, 0x20, 0x90, 0xe5, 0x01, 0x20, 0x82, 0xe1, 0x50, 0x00, 0x9f, 0xe5,
|
||||
0x00, 0x10, 0xa0, 0xe3, 0x00, 0x14, 0x80, 0xe5, 0x00, 0x10, 0x80, 0xe5, 0x00, 0x00, 0x52, 0xe3,
|
||||
0x02, 0x00, 0x00, 0x1a, 0x8c, 0x00, 0x1f, 0xe5, 0x8c, 0x10, 0x1f, 0xe5, 0x01, 0x00, 0x00, 0xea,
|
||||
0xa0, 0x00, 0x1f, 0xe5, 0xa0, 0x10, 0x1f, 0xe5, 0x01, 0x40, 0x43, 0xe0, 0x01, 0x20, 0x50, 0xe4,
|
||||
0x01, 0x20, 0x43, 0xe4, 0x04, 0x00, 0x53, 0xe1, 0xfb, 0xff, 0xff, 0x1a, 0x01, 0x00, 0x83, 0xe2,
|
||||
0x00, 0x20, 0xa0, 0xe3, 0x15, 0xff, 0x2f, 0xe1, 0x38, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0f, 0x00,
|
||||
0x14, 0x00, 0x0f, 0xc8, 0x00, 0x00, 0x0c, 0xc8, 0x00, 0x00, 0x0d, 0xc8, 0x00, 0x00, 0x0b, 0xc8
|
||||
};
|
||||
|
|
|
@ -7,4 +7,4 @@ extern unsigned char dualboot_c200v2[228];
|
|||
extern unsigned char dualboot_m200v4[204];
|
||||
extern unsigned char dualboot_fuze[228];
|
||||
extern unsigned char dualboot_clipv2[272];
|
||||
extern unsigned char dualboot_clipplus[188];
|
||||
extern unsigned char dualboot_clipplus[256];
|
||||
|
|
|
@ -157,11 +157,35 @@ uclcopy:
|
|||
cmp r1, #0 /* C3 = #0 means button pressed */
|
||||
beq boot_of
|
||||
#elif defined(SANSA_CLIPPLUS)
|
||||
/* TODO */
|
||||
mov r0, #0x500000 /* Approximately 5 seconds */
|
||||
1: subs r0, r0, #1 /* just to prove we are running */
|
||||
@ Assumes GPIOB_DIR is 0x00 on reset
|
||||
ldr r0, =GPIOB
|
||||
mov r1, #(1<<0) @ pin 0
|
||||
str r1, [r0, #0x400] @ GPIOB(0) = output
|
||||
str r1, [r0, #4*(1<<0)] @ write 1 to GPIOB(0)
|
||||
|
||||
mov r1, #500 @ small delay
|
||||
1: subs r1, r1, #1
|
||||
bne 1b
|
||||
b boot_of /* branch to OF */
|
||||
|
||||
@ read pins
|
||||
ldr r0, =GPIOC
|
||||
ldr r1, [r0, #4*(1<<3)] @ read pin C3 "|<<"
|
||||
|
||||
ldr r0, =GPIOA
|
||||
ldr r2, [r0, #4*(1<<1)] @ read pin A1 "Home"
|
||||
|
||||
orr r2, r2, r1 @ c3 || A1
|
||||
|
||||
@ restore GPIOB_DIR(0)
|
||||
ldr r0, =GPIOB
|
||||
mov r1, #0
|
||||
str r1, [r0, #0x400] @ Restore GPIOB_DIR to 0x00
|
||||
|
||||
@ Unset GPIOB(0)
|
||||
str r1, [r0, #4*(0<<0)] @ write 0 to GPIOB(0)
|
||||
|
||||
cmp r2, #0 @ test input from pins
|
||||
bne boot_of @ branch directly to OF if either pin high
|
||||
#elif defined(SANSA_C200V2)
|
||||
/* check for RIGHT on C6, should changed to LEFT as soon as it
|
||||
* known in which pin that is in order for consistency */
|
||||
|
|
|
@ -222,9 +222,7 @@ static struct md5sums sansasums[] = {
|
|||
{ MODEL_CLIPV2, "2.01.16", "c57fb3fcbe07c2c9b360f060938f80cb" },
|
||||
{ MODEL_CLIPV2, "2.01.32", "0ad3723e52022509089d938d0fbbf8c5" },
|
||||
|
||||
#if 0 /* uncomment when Clip+ support is tested */
|
||||
{ MODEL_CLIPPLUS, "01.02.09", "656d38114774c2001dc18e6726df3c5d" },
|
||||
#endif
|
||||
};
|
||||
|
||||
#define NUM_MD5S (sizeof(sansasums)/sizeof(sansasums[0]))
|
||||
|
|
Loading…
Reference in a new issue