- Timestamp:
- 10/22/11 23:45:27 (7 months ago)
- Location:
- trunk
- Files:
-
- 3 edited
-
programmer.h (modified) (1 diff)
-
serprog-protocol.txt (modified) (1 diff)
-
serprog.c (modified) (12 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/programmer.h
r1450 r1456 608 608 uint8_t serprog_chip_readb(const chipaddr addr); 609 609 void serprog_chip_readn(uint8_t *buf, const chipaddr addr, size_t len); 610 void serprog_delay(int delay);610 void serprog_delay(int usecs); 611 611 int serprog_spi_send_command(unsigned int writecnt, unsigned int readcnt, 612 const unsigned char *writearr, unsigned char *readarr); 612 const unsigned char *writearr, 613 unsigned char *readarr); 613 614 int serprog_spi_read(struct flashchip *flash, uint8_t *buf, int start, int len); 614 615 #endif -
trunk/serprog-protocol.txt
r1442 r1456 20 20 0x06 Query connected address lines none ACK + 8bit line count / NAK 21 21 0x07 Query operation buffer size none ACK + 16bit size / NAK 22 0x08 Query write-n maximum data len none ACK + 24bit maximum length/ NAK22 0x08 Query maximum write-n length none ACK + 24bit length (0==2^24) / NAK 23 23 0x09 Read byte 24-bit addr ACK + BYTE / NAK 24 24 0x0A Read n bytes 24-bit addr + 24-bit length ACK + length bytes / NAK -
trunk/serprog.c
r1450 r1456 39 39 #include "chipdrivers.h" 40 40 41 #define MSGHEADER "serprog: "41 #define MSGHEADER "serprog: " 42 42 43 43 /* … … 205 205 } 206 206 } 207 msg_perr("Error: cannot synchronize protocol \n"207 msg_perr("Error: cannot synchronize protocol " 208 208 "- check communications and reset device?\n"); 209 209 exit(1); … … 221 221 { 222 222 if ((sp_check_avail_automatic) && (sp_check_commandavail(cmd) == 0)) { 223 msg_pdbg("Warning: Automatic command availability check "224 " failed for cmd %d - wont execute cmd\n",cmd);223 msg_pdbg("Warning: Automatic command availability check failed " 224 "for cmd 0x%x - won't execute cmd\n", cmd); 225 225 return 1; 226 226 } … … 229 229 230 230 static int sp_docommand(uint8_t command, uint32_t parmlen, 231 uint8_t * params, uint32_t retlen, void *retparms) 232 { 233 unsigned char *sendpacket; 231 uint8_t *params, uint32_t retlen, void *retparms) 232 { 234 233 unsigned char c; 235 234 if (sp_automatic_cmdcheck(command)) 236 235 return 1; 237 sendpacket = malloc(1 + parmlen); 238 if (!sendpacket) 239 sp_die("Error: cannot malloc command buffer"); 240 sendpacket[0] = command; 241 memcpy(&(sendpacket[1]), params, parmlen); 242 if (write(sp_fd, sendpacket, 1 + parmlen) != (1 + parmlen)) { 243 sp_die("Error: cannot write command"); 244 } 245 free(sendpacket); 236 if (write(sp_fd, &command, 1) != 1) 237 sp_die("Error: cannot write op code"); 238 if (write(sp_fd, params, parmlen) != (parmlen)) 239 sp_die("Error: cannot write parameters"); 246 240 if (read(sp_fd, &c, 1) != 1) 247 241 sp_die("Error: cannot read from device"); 248 if (c == S_NAK) return 1; 242 if (c == S_NAK) 243 return 1; 249 244 if (c != S_ACK) { 250 245 msg_perr("Error: invalid response 0x%02X from device\n",c); … … 257 252 r = read(sp_fd, retparms + rd_bytes, 258 253 retlen - rd_bytes); 259 if (r <= 0) sp_die260 ("Error: cannot read return parameters");254 if (r <= 0) 255 sp_die("Error: cannot read return parameters"); 261 256 rd_bytes += r; 262 257 } while (rd_bytes != retlen); … … 405 400 406 401 if (sp_docommand(S_CMD_Q_IFACE, 0, NULL, 2, &iface)) { 407 msg_perr("Error: NAK to Query Interface version\n");402 msg_perr("Error: NAK to query interface version\n"); 408 403 exit(1); 409 404 } 410 405 411 406 if (iface != 1) { 412 msg_perr("Error: Unknown interface version %d\n", iface);407 msg_perr("Error: Unknown interface version: %d\n", iface); 413 408 exit(1); 414 409 } … … 429 424 } 430 425 buses_supported = c; 426 msg_pdbg(MSGHEADER "Bus support: parallel=%s, LPC=%s, FWH=%s, SPI=%s\n", 427 (c & BUS_PARALLEL) ? "on" : "off", 428 (c & BUS_LPC) ? "on" : "off", 429 (c & BUS_FWH) ? "on" : "off", 430 (c & BUS_SPI) ? "on" : "off"); 431 431 /* Check for the minimum operational set of commands. */ 432 432 if (buses_supported & BUS_SPI) { … … 539 539 } 540 540 pgmname[16] = 0; 541 msg_pinfo(MSGHEADER "Programmer name \"%s\"\n", pgmname);541 msg_pinfo(MSGHEADER "Programmer name is \"%s\"\n", pgmname); 542 542 543 543 if (sp_docommand(S_CMD_Q_SERBUF, 0, NULL, 2, &sp_device_serbuf_size)) { 544 544 msg_perr("Warning: NAK to query serial buffer size\n"); 545 545 } 546 msg_pdbg(MSGHEADER " serial buffer size%d\n",546 msg_pdbg(MSGHEADER "Serial buffer size is %d\n", 547 547 sp_device_serbuf_size); 548 548 … … 565 565 "size\n"); 566 566 } 567 msg_pdbg(MSGHEADER "operation buffer size %d\n",567 msg_pdbg(MSGHEADER "operation buffer size is %d\n", 568 568 sp_device_opbuf_size); 569 569 } … … 582 582 unsigned char header[7]; 583 583 msg_pspew(MSGHEADER "Passing write-n bytes=%d addr=0x%x\n", 584 sp_write_n_bytes, sp_write_n_addr);584 sp_write_n_bytes, sp_write_n_addr); 585 585 if (sp_streamed_transmit_bytes >= 586 586 (7 + sp_write_n_bytes + sp_device_serbuf_size)) … … 736 736 size_t lenm = len; 737 737 chipaddr addrm = addr; 738 while ((sp_max_read_n )&&(lenm > sp_max_read_n)) {739 sp_do_read_n(&(buf[addrm-addr]), addrm,sp_max_read_n);738 while ((sp_max_read_n != 0) && (lenm > sp_max_read_n)) { 739 sp_do_read_n(&(buf[addrm-addr]), addrm, sp_max_read_n); 740 740 addrm += sp_max_read_n; 741 741 lenm -= sp_max_read_n; 742 742 } 743 if (lenm) sp_do_read_n(&(buf[addrm-addr]),addrm,lenm); 744 } 745 746 void serprog_delay(int delay) 743 if (lenm) 744 sp_do_read_n(&(buf[addrm-addr]), addrm, lenm); 745 } 746 747 void serprog_delay(int usecs) 747 748 { 748 749 unsigned char buf[4]; 749 msg_pspew("%s \n", __func__);750 msg_pspew("%s usecs=%d\n", __func__, usecs); 750 751 if (!sp_check_commandavail(S_CMD_O_DELAY)) { 751 internal_delay(delay);752 752 msg_pdbg("Note: serprog_delay used, but the programmer doesn't " 753 753 "support delay\n"); 754 internal_delay(usecs); 754 755 return; 755 756 } … … 757 758 sp_pass_writen(); 758 759 sp_check_opbuf_usage(5); 759 buf[0] = (( delay>> 0) & 0xFF);760 buf[1] = (( delay>> 8) & 0xFF);761 buf[2] = (( delay>> 16) & 0xFF);762 buf[3] = (( delay>> 24) & 0xFF);760 buf[0] = ((usecs >> 0) & 0xFF); 761 buf[1] = ((usecs >> 8) & 0xFF); 762 buf[2] = ((usecs >> 16) & 0xFF); 763 buf[3] = ((usecs >> 24) & 0xFF); 763 764 sp_stream_buffer_op(S_CMD_O_DELAY, 4, buf); 764 765 sp_opbuf_usage += 5;
Note: See TracChangeset
for help on using the changeset viewer.
