Ivo van Poorten
/
SiLabs_C2
Basis for the C2 protocol from Silicon Labs.
Diff: main.cpp
- Revision:
- 16:844edb89d863
- Parent:
- 15:0ccb0277d98e
- Child:
- 17:0c5581ae2471
--- a/main.cpp Mon May 26 17:38:22 2014 +0000 +++ b/main.cpp Mon May 26 18:08:12 2014 +0000 @@ -109,7 +109,7 @@ c2ck = 0; wait_us(25); c2ck = 1; - wait_us(2); + wait_us(3); } static void c2ck_strobe(void) { @@ -199,9 +199,15 @@ } static int poll_status(int mask) { - int t = 20; + int t = 20, s; do { - if (!(c2_read_ar() & mask)) return 0; + s = c2_read_ar(); + if (mask == C2_MASK_INBUSY) { + if (!(s & mask)) return 0; + } else { + if (s & mask) return 0; + } + printf("debug: wait 1us\r\n"); wait_us(1); } while(--t); return -1; @@ -221,14 +227,16 @@ c2_write_ar(C2_REG_FPDAT); c2_write_dr(type); - if (poll_status(C2_MASK_INBUSY) < 0 || poll_status(C2_MASK_OUTREADY) < 0) - fatal("read_mem: cannot set FPDAT"); + if (poll_status(C2_MASK_INBUSY) < 0) + fatal("read_mem: cannot set FPDAT, no input ACK"); + if (poll_status(C2_MASK_OUTREADY) < 0) + fatal("read_mem: cannot set FPDAT, no output ready"); ret = c2_read_dr(); if (ret != C2_PI_STATUS_OK) fatal("read_mem: status not OK after setting FPDAT (status %02X)", ret); - if (ram_or_sfr) { + if (!ram_or_sfr) { c2_write_dr((address >> 8)&0xff); if (poll_status(C2_MASK_INBUSY) < 0) fatal("read_mem: cannot write msb of address"); @@ -238,13 +246,13 @@ if (poll_status(C2_MASK_INBUSY) < 0) fatal("read_mem: cannot write lsb of address"); - c2_write_dr(size); + c2_write_dr(size&0xff); if (poll_status(C2_MASK_INBUSY) < 0) fatal("read_mem: cannot set block length"); if (poll_status(C2_MASK_OUTREADY) < 0) - fatal("read_mem: no data ready"); + fatal("read_mem: no data ready (dr:%02X ar:%02X)", c2_read_dr(), c2_read_ar()); - for (i=0; i<=size; i++) + for (i=0; i<size; i++) buf[i] = c2_read_dr(); } @@ -288,6 +296,6 @@ c2_enable_pi(); printf("Reading page 0\r\n"); - c2_read_mem(C2_PI_CMD_DIRECT_READ, 0x0000, 0xff, buffer); + c2_read_mem(C2_PI_CMD_BLOCK_READ, 0x0000, 0x100, buffer); printf("Looks like all went well!!!"); } \ No newline at end of file