mirror of
git://projects.qi-hardware.com/ben-wpan.git
synced 2024-11-19 09:51:52 +02:00
Next part of board bringup: reset and power cycling.
- atusd/ERRATA: one more problem: the transistor footprint is wrong - atusd/tools/lib/atusd.c (atusd_cycle, atusd_reset): added power cycling and hardware reset - atusd/tools/lib/atusd.h: be nice and make a header file - atusd/tools/try.c: be nice and use header files (caught a bug as well)
This commit is contained in:
parent
86e556ce92
commit
a18d5969bd
@ -3,3 +3,6 @@
|
|||||||
|
|
||||||
- added wire connecting uSD-side ground plane to ground plane at outer edge,
|
- added wire connecting uSD-side ground plane to ground plane at outer edge,
|
||||||
to improve CLK signal return. (Probably unnecessary, too.)
|
to improve CLK signal return. (Probably unnecessary, too.)
|
||||||
|
|
||||||
|
- the footprint of the transistor (Q1) is reversed :-( It works after
|
||||||
|
converting the chip from SOT to PLCC.
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
|
|
||||||
@ -102,7 +103,7 @@ struct atusd_dsc *atusd_open(void)
|
|||||||
|
|
||||||
void atusd_close(struct atusd_dsc *dsc)
|
void atusd_close(struct atusd_dsc *dsc)
|
||||||
{
|
{
|
||||||
/* stop the MMC clock */
|
/* stop the MMC bus clock */
|
||||||
MSC_STRPCL = 1;
|
MSC_STRPCL = 1;
|
||||||
|
|
||||||
/* cut the power */
|
/* cut the power */
|
||||||
@ -111,3 +112,52 @@ void atusd_close(struct atusd_dsc *dsc)
|
|||||||
/* make all MMC pins inputs */
|
/* make all MMC pins inputs */
|
||||||
PDDIRC = MxSx | CLK | SCLK | SLP_TR | IRQ | nSEL;
|
PDDIRC = MxSx | CLK | SCLK | SLP_TR | IRQ | nSEL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void atusd_cycle(struct atusd_dsc *dsc)
|
||||||
|
{
|
||||||
|
/* stop the MMC bus clock */
|
||||||
|
MSC_STRPCL = 1;
|
||||||
|
|
||||||
|
/* drive all outputs low (including the MMC bus clock) */
|
||||||
|
PDDATC = MxSx | CLK | SCLK | SLP_TR | nSEL;
|
||||||
|
|
||||||
|
/* make the MMC bus clock a regular output */
|
||||||
|
PDFUNC = CLK;
|
||||||
|
|
||||||
|
/* cut the power */
|
||||||
|
PDDATS = VDD_OFF;
|
||||||
|
|
||||||
|
/* Power drains within about 20 ms. Wait 100 ms to be sure. */
|
||||||
|
usleep(100*1000);
|
||||||
|
|
||||||
|
/* drive nSS high */
|
||||||
|
PDDATS = nSEL;
|
||||||
|
|
||||||
|
/* supply power */
|
||||||
|
PDDATS = VDD_OFF;
|
||||||
|
|
||||||
|
/* return the bus clock output to the MMC controller */
|
||||||
|
PDFUNS = CLK;
|
||||||
|
|
||||||
|
/* start MMC clock output */
|
||||||
|
MSC_STRPCL = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void atusd_reset(struct atusd_dsc *dsc)
|
||||||
|
{
|
||||||
|
/* activate reset */
|
||||||
|
PDDATS = SLP_TR;
|
||||||
|
PDDATC = nSEL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Data sheet says 625 ns, programmer's guide says 6 us. Whom do we
|
||||||
|
* trust ?
|
||||||
|
*/
|
||||||
|
usleep(6);
|
||||||
|
|
||||||
|
/* release reset */
|
||||||
|
PDDATS = nSEL;
|
||||||
|
PDDATC = SLP_TR;
|
||||||
|
}
|
||||||
|
7
atusd/tools/lib/atusd.h
Normal file
7
atusd/tools/lib/atusd.h
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
struct atusd_dsc;
|
||||||
|
|
||||||
|
|
||||||
|
struct atusd_dsc *atusd_open(void);
|
||||||
|
void atusd_close(struct atusd_dsc *dsc);
|
||||||
|
void atusd_cycle(struct atusd_dsc *dsc);
|
||||||
|
void atusd_reset(struct atusd_dsc *dsc);
|
@ -1,4 +1,7 @@
|
|||||||
struct atusd_dsc;
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include "lib/atusd.h"
|
||||||
|
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
@ -7,7 +10,10 @@ int main(void)
|
|||||||
char tmp;
|
char tmp;
|
||||||
|
|
||||||
dsc = atusd_open();
|
dsc = atusd_open();
|
||||||
read(1, tmp, 1);
|
read(1, &tmp, 1);
|
||||||
|
fprintf(stderr, "cycling\n");
|
||||||
|
atusd_cycle(dsc);
|
||||||
|
read(1, &tmp, 1);
|
||||||
atusd_close(dsc);
|
atusd_close(dsc);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user