4 #if defined(PROJECT_K2)
5 #if SYSTEM_MODULE_SFLASH
6 #include "sflash_api.h"
8 #endif /* #if defined(PROJECT_K2) */
10 #if defined(SYSTEM_MODULE_DBG)
12 /* Function prototypes */
13 int db_help_cmd(char *, char*, char*, char*);
14 int db_ldr_cmd(char*, char*, char*, char*);
15 int db_str_cmd(char*, char*, char*, char*);
16 int db_dump_memory(char* cmd, char* param1, char* param2, char* param3);
17 int db_info_cmd(char*, char*, char*, char*);
18 int db_cmd_dbg(char*, char*, char*, char*);
19 int db_usb_cmd(char*, char*, char*, char*);
20 int db_intr_cmd(char*, char*, char*, char*);
21 int db_patch_cmd(char*, char*, char*, char*);
23 int db_cmd_memtest(char* cmd, char* param1, char* param2, char* param3);
24 int db_cmd_dmips(char* cmd, char* param1, char* param2, char* param3);
25 int db_cmd_starthtc(char* cmd, char* param1, char* param2, char* param3);
27 int db_eeprom_cmd(char* cmd, char* param1, char* param2, char* param3);
28 int db_wdt_cmd(char* cmd, char* param1, char* param2, char* param3);
30 #if defined(PROJECT_K2)
31 #if SYSTEM_MODULE_SFLASH
32 int db_cmd_sferase(char* cmd, char* param1, char* param2, char* param3);
33 int db_cmd_sfpg(char* cmd, char* param1, char* param2, char* param3);
34 int db_cmd_sfru(char* cmd, char* param1, char* param2, char* param3);
35 int db_cmd_sfrm(char* cmd, char* param1, char* param2, char* param3);
36 int db_cmd_sfrdsr(char* cmd, char* param1, char* param2, char* param3);
38 #endif /* #if defined(PROJECT_K2) */
39 int db_cmd_memcmp(char* cmd, char* param1, char* param2, char* param3);
40 int db_cmd_memdump(char* cmd, char* param1, char* param2, char* param3);
42 int db_clock_cmd(char* cmd, char* param1, char* param2, char* param3);
44 uint16_t db_get_cmd_line(uint8_t ch, char *cmd_line, uint16_t* i);
45 int db_formalize_command(char*, char*);
46 int db_ascii_to_hex(char*, unsigned long*);
47 int db_hex_to_ascii(unsigned long, char*);
48 void zfDebugTask(void);
50 int db_info_intr(char* cmd, char* param1, char* param2, char* param3);
52 extern u32_t this_is_global_variables;
54 /* Console debug command table */
55 const struct DB_COMMAND_STRUCT command_table[] =
57 {"HELP", ", List all debug commands", db_help_cmd},
58 {"?", ", Equal to HELP comamnd", db_help_cmd},
60 /* Basic load/store/dump command */
61 {"LDR", "<Hex addr>, Load word", db_ldr_cmd},
62 {"LDRH", "<Hex addr>, Load half word", db_ldr_cmd},
63 {"LDRB", "<Hex addr>, Load byte", db_ldr_cmd},
64 {"STR", "<Hex addr> <Hex value>, Store word", db_str_cmd},
65 {"STRH", "<Hex addr> <Hex value>, Store half word", db_str_cmd},
66 {"STRB", "<Hex addr> <Hex value>, Store byte", db_str_cmd},
67 {"DUMP", "<Hex addr>, Dump memory", db_dump_memory},
68 {"INFO", ", Print debug information", db_info_cmd},
69 {"USB", ", usb releated command", db_usb_cmd},
70 {"INTR", ", intr releated command", db_intr_cmd},
71 {"PATCH", ", patch function releated command", db_patch_cmd},
72 {"DBG", ", mute all print msg", db_cmd_dbg},
73 {"CLOCK", ", change the clock...", db_clock_cmd},
74 {"MEMTEST", "<Hex addr> <Number of bytes> test memory", db_cmd_memtest},
75 {"HTCR", "Issue HTC ready to host", db_cmd_starthtc},
76 {"EEP", ", eeprom r/w debug command", db_eeprom_cmd},
77 {"WDT", ", wdt debug command", db_wdt_cmd},
78 #if defined(PROJECT_K2)
79 #if SYSTEM_MODULE_SFLASH
80 {"SFE", ", S<Hex>/B<Hex>/C, SPI Flash chip erase", db_cmd_sferase},
81 {"SFPG", "<Hex addr> <Hex len> <Hex buf>, SPI Flash program", db_cmd_sfpg},
82 {"SFRU", "f/r <Hex addr> <Hex addr>, SPI Flash fast read/read to UART", db_cmd_sfru},
83 {"SFRM", "f/r <Hex addr> <Hex addr>, SPI Flash fast read/read to Memory 0x520000", db_cmd_sfrm},
84 {"SFRDSR", ", SPI Flash status register read", db_cmd_sfrdsr},
86 #endif /* #if defined(PROJECT_K2) */
87 {"MEMCMP", "<Hex addr> <Hex addr> <Hex len>, memory comparison", db_cmd_memcmp},
88 {"MEMDMP", "<Hex addr> <Hex addr>, memory dump", db_cmd_memdump},
90 /* {Command, Help description, function} */
93 char cmd_buffer[COMMAND_BUFFER_SIZE][DB_MAX_COMMAND_LENGTH]; /* Backup previous command */
96 char raw_cmd[DB_MAX_COMMAND_LENGTH];
97 char cmd_str[DB_MAX_COMMAND_LENGTH*4];
102 //////////////////////////////////////////////////
103 #define MAX_REG_NUM 16
105 typedef struct reg_elem {
107 unsigned char mode; // byte, half-word word
108 unsigned long reg_addr;
111 t_reg_elem reg_buffer[MAX_REG_NUM];
113 //////////////////////////////////////////////////
115 void zfDebugInit(void)
120 while ((zm_get_char(&ch)) != 0)
125 cmd_buf_full = FALSE;
130 void zfDebugTask(void)
135 if ((zm_get_char(&ch)) == 0)
140 if (db_get_cmd_line(ch, raw_cmd, &gvLen) == 0)
145 if (db_formalize_command(raw_cmd, cmd_str))
150 cmd_not_found = TRUE;
151 while(command_table[i].cmd_func)
153 if (!strcmp(command_table[i].cmd_str, cmd_str))
155 cmd_not_found = FALSE;
156 command_table[i].cmd_func(cmd_str,
157 cmd_str+DB_MAX_COMMAND_LENGTH,
158 cmd_str+DB_MAX_COMMAND_LENGTH*2,
159 cmd_str+DB_MAX_COMMAND_LENGTH*3);
166 zm_uart_send("Error, HELP for command list.\n\r", 31);
171 zm_uart_send(">", 1);
175 uint16_t db_get_cmd_line(uint8_t ch, char *cmd_line, uint16_t* i)
181 case '\\' : /* Last command */
183 if (pressed_time >= COMMAND_BUFFER_SIZE)
187 cmd_buf_loc = cmd_buf_ptr - pressed_time;
190 if (cmd_buf_full == TRUE)
192 cmd_buf_loc += COMMAND_BUFFER_SIZE;
200 if(strlen(cmd_buffer[cmd_buf_loc]) != 0)
202 strcpy(cmd_line, cmd_buffer[cmd_buf_loc]);
203 *i = strlen(cmd_buffer[cmd_buf_loc]);
204 zm_uart_send("\r>", 2);
205 zm_uart_send(cmd_line, *i);
208 case 13 : /* Return */
211 zm_uart_send("\n\r", 2);
214 //Filter duplicated string in command history
215 if (strcmp(cmd_buffer[(cmd_buf_ptr==0)?(COMMAND_BUFFER_SIZE-1):(cmd_buf_ptr-1)], cmd_line) != 0)
217 strcpy(cmd_buffer[cmd_buf_ptr++], cmd_line);
220 if (cmd_buf_ptr >= COMMAND_BUFFER_SIZE)
226 case '\b' : /* Backspace */
231 zm_uart_send("\b \b", 3);
237 if ((ch >= ' ') && (ch <= '~'))
240 if (*i < DB_MAX_COMMAND_LENGTH-2)
242 if ((ch >= 0x11) && (ch <= 0x7e))
244 //if ((buf <= 'z') && (buf >= 'a'))
250 zm_uart_send(&ch, 1);
257 zm_uart_send(&ch, 1);
260 } /* end of switch */
266 int db_formalize_command(char* raw_str, char* cmd_str)
275 /* Remove preceeding spaces */
276 while (raw_str[i++] == ' '){}
279 /* Copy command string */
281 while(raw_str[i] && (raw_str[i] != ' '))
285 if ((raw_str[i] <= 'z') && (raw_str[i] >= 'a'))
287 raw_str[i] -= 'a' - 'A';
289 cmd_str[k*DB_MAX_COMMAND_LENGTH + j++] = raw_str[i++];
293 cmd_str[k*DB_MAX_COMMAND_LENGTH + j++] = raw_str[i++];
296 cmd_str[k*DB_MAX_COMMAND_LENGTH + j] = 0;
298 return (int)strlen(cmd_str);
301 int db_ascii_to_hex(char* num_str, unsigned long* hex_num)
308 if ((num_str[i] >= '0') && (num_str[i] <= '9'))
311 *hex_num += (num_str[i] - '0');
313 else if ((num_str[i] >= 'A') && (num_str[i] <= 'F'))
316 *hex_num += (num_str[i] - 'A' + 10);
318 else if ((num_str[i] >= 'a') && (num_str[i] <= 'f'))
321 *hex_num += (num_str[i] - 'a' + 10);
332 int db_ascii_to_int(char* num_str, unsigned long* int_num)
339 if ((num_str[i] >= '0') && (num_str[i] <= '9'))
342 *int_num += (num_str[i] - '0');
353 int db_hex_to_ascii(unsigned long hex_num, char* num_str)
356 unsigned long four_bits;
360 four_bits = (hex_num >> i*4) & 0xf;
363 num_str[7-i] = four_bits + '0';
367 num_str[7-i] = four_bits - 10 + 'A';
374 int db_help_cmd(char* cmd, char* param1, char* param2, char* param3)
380 zm_uart_send(ATH_DEBUGGER_VERSION_STR, strlen(ATH_DEBUGGER_VERSION_STR));
381 zm_uart_send(ATH_COMMAND_LIST_STR, strlen(ATH_COMMAND_LIST_STR));
383 while (command_table[i].cmd_func)
385 zm_uart_send(command_table[i].cmd_str, strlen(command_table[i].cmd_str));
386 zm_uart_send("\t", 1);
387 zm_uart_send(command_table[i].help_str, strlen(command_table[i].help_str));
388 zm_uart_send("\n\r", 2);
394 int db_ldr_cmd(char* cmd, char* param1, char* param2, char* param3)
401 if (db_ascii_to_hex(param1, &addr) != -1)
405 zm_uart_send("Error! bad address 0x%08x.\n\r", (unsigned long)addr);
408 if (strcmp(cmd, "LDR") == 0)
411 //val = *(unsigned long *)addr;
413 val = HAL_WORD_REG_READ(addr);
415 else if (strcmp(cmd, "LDRH") == 0)
418 val = HAL_HALF_WORD_REG_READ(addr);
420 else if (strcmp(cmd, "LDRB") == 0)
424 db_hex_to_ascii(val, val_str);
425 db_hex_to_ascii(addr, addr_str);
427 zm_uart_send(addr_str, strlen(addr_str));
428 zm_uart_send(" : ", 3);
429 zm_uart_send(val_str, strlen(val_str));
430 zm_uart_send("\n\r", 2);
436 zm_uart_send("Error! Incorrect format.\n\r", 26);
442 int db_str_cmd(char* cmd, char* param1, char* param2, char* param3)
449 if ((strlen(param2) > 0) &&
450 (db_ascii_to_hex(param1, &addr) != -1) &&
451 (db_ascii_to_hex(param2, &val) != -1))
453 if (strcmp(cmd, "STR") == 0)
456 //HAL_WORD_REG_WRITE(addr, val);
457 HAL_WORD_REG_WRITE(addr, val);
458 //*(volatile unsigned long *)(addr & 0xfffffffc) = (unsigned long)val;
461 else if (strcmp(cmd, "STRH") == 0)
464 //*(volatile unsigned short *)(addr & 0xfffffffe) = (unsigned short)val;
465 HAL_HALF_WORD_REG_WRITE(addr, val);
467 else if (strcmp(cmd, "STRB") == 0)
469 if( addr & 0x00f00000 )
470 HAL_BYTE_REG_WRITE(addr, val);
472 HAL_BYTE_REG_WRITE(addr^3, val);
473 //*(volatile unsigned char *)addr = (unsigned char)val;
476 db_hex_to_ascii(val, val_str);
477 db_hex_to_ascii(addr, addr_str);
479 zm_uart_send(addr_str, strlen(addr_str));
480 zm_uart_send(" : ", 3);
481 zm_uart_send(val_str, strlen(val_str));
482 zm_uart_send("\n\r", 2);
488 zm_uart_send("Error! Incorrect format.\n\r", 26);
494 // macro extension the address to dump the memory
495 #define FOUR_BYTE_HEX_DUMP(addr) (" %02x %02x %02x %02x", \
496 *(uint8_t*)((addr)+3), *(uint8_t*)((addr)+2), \
497 *(uint8_t*)((addr)+1), *(uint8_t*)((addr)))
500 int db_dump_memory(char* cmd, char* param1, char* param2, char* param3)
503 unsigned long length;
504 unsigned long ptrAddr;
507 if (db_ascii_to_hex(param1, &addr) != -1 &&
508 (db_ascii_to_int(param2, &length) != -1))
510 // if no length, default is 128 bytes to dump
515 A_PRINTF("length: %d\n\r", length);
517 //zm_uart_send(" 7 6 5 4 3 2 1 0\n\r", 28);
518 A_PRINTF(" 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00\n\r");
519 A_PRINTF("------------------------------------------------------------\n\r");
520 for (i=0; i<length/16; i++)
522 //zfUartSendHex((unsigned long)addr);
523 A_PRINTF("%08x: ", (unsigned long)addr);
525 ptrAddr = (unsigned long *)addr;
527 // dump from MSB to LSB
528 A_PRINTF FOUR_BYTE_HEX_DUMP(ptrAddr+12);
529 A_PRINTF FOUR_BYTE_HEX_DUMP(ptrAddr+8);
531 A_PRINTF FOUR_BYTE_HEX_DUMP(ptrAddr+4);
532 A_PRINTF FOUR_BYTE_HEX_DUMP(ptrAddr);
537 // the rest of the byte to dump
538 if( (length %16)!=0 )
540 A_PRINTF("%08x: ", (unsigned long)addr);
542 // make the space, since we dump MSB first
543 for(i=0; i<(16-(length %16)); i++)
546 // if less than 8 bytes, add 2 more space for " -"
547 if( (length%16) < 8 )
550 for(i=0; i<length%16; i++)
553 A_PRINTF(" %02x", *(uint8_t*)((addr+(length%16)-1)-i));
555 if((16-(length%16))+i==7)
565 LOCAL void dbg_timer_func(A_HANDLE alarm, void *data)
567 A_PRINTF("this is a timer alarm function 0x%08x\n\r", xthal_get_ccount());
570 int db_patch_cmd(char* cmd, char* param1, char* param2, char* param3)
584 int db_intr_cmd(char* cmd, char* param1, char* param2, char* param3)
586 #if SYSTEM_MODULE_INTR
587 uint32_t pending_intrs;
589 if(strcmp(param1, "read") == 0 )
592 /* Update snapshot of pending interrupts */
594 pending_intrs = A_INTR_GET_INTRPENDING();
596 A_PRINTF("intr mask [0x%08x]\n\r", xthal_get_intenable());
597 A_PRINTF("intr on [0x%08x]\n\r", pending_intrs);
600 else if (strcmp(param1, "timer") == 0 )
604 if (strcmp(param2, "on") == 0 )
606 A_ATTACH_ISR(A_INUM_XTTIMER, cb_tick, NULL);
608 pending_intrs = A_INTR_GET_INTRENABLE()|CMNOS_IMASK_XTTIMER;
609 A_INTR_SET_INTRENABLE(pending_intrs);
610 A_PRINTF("- intr [0x%08x]\n\r", pending_intrs);
612 else if ( strcmp(param2, "off") == 0 )
614 pending_intrs = A_INTR_GET_INTRENABLE()&(~CMNOS_IMASK_XTTIMER);
615 A_INTR_SET_INTRENABLE(pending_intrs);
616 A_PRINTF("- intr [0x%08x]\n\r", pending_intrs);
619 else if( db_ascii_to_hex(param2, &data)==0 )
621 if( data>=0 && data <=10 )
626 A_PRINTF("==>set cb to %d seconds \n\r", delay);
632 A_PRINTF("\tintr read - read the interrenable status\n\r");
633 A_PRINTF("\tintr timer on/off/tick - timer attach on/off/ticks\n\r");
637 #endif //#if SYSTEM_MODULE_INTR
641 uint32_t usb_swap_flag = 0; //default
642 uint32_t usb_swap_flag_changed = 0;
643 int db_usb_cmd(char* cmd, char* param1, char* param2, char* param3)
645 A_PRINTF("THIS IS USB COMMAND\n\r");
647 if( strcmp(param1, "que") == 0 )
649 HIFusb_DescTraceDump();
653 A_PRINTF("\tusb que - dump descriptor queue\n\r");
654 A_PRINTF("\tusb fw on/off - enable/disable write fw download to ram\n\r");
660 static void clk_change(uint32_t clk, uint32_t ratio, uint32_t baud)
662 uint32_t clk_sel = 0;
685 HAL_WORD_REG_WRITE(0x50040, (0x300|clk_sel|(ratio>>1)<<12));
686 A_UART_HWINIT((clk*1000*1000)/ratio, baud);
690 int db_clock_cmd(char* cmd, char* param1, char* param2, char* param3)
693 uint32_t baud = 19200;
696 if( db_ascii_to_int(param1, &clk) != -1 )
698 A_PRINTF("changing clock to %d\n", clk);
699 clk_change(clk, ratio, baud);
703 int db_info_cmd(char* cmd, char* param1, char* param2, char* param3)
707 if(strcmp(param1, "ram") == 0 )
711 #if SYSTEM_MODULE_SYS_MONITOR
712 else if(strcmp(param1, "cpu") == 0)
713 zfPrintCpuUtilization();
716 HIFusb_DescTraceDump();
727 register uint32_t data1;
728 if( db_ascii_to_hex(param1, &data1)==0 )
730 __asm__ __volatile__ (
732 : "=a" (ccount1) : : "memory"
734 data = *(volatile uint32_t *)(data1);
735 __asm__ __volatile__ (
737 : "=a" (ccount2) : : "memory"
739 A_PRINTF("\n\rread 0x%08x (0x%08x) use %d clocks\n\r", data1, data, ccount2-ccount1);
742 __asm__ __volatile__ (
744 : "=a" (ccount1) : : "memory"
746 data = *(volatile uint32_t *)(data1);
747 __asm__ __volatile__ (
749 : "=a" (ccount2) : : "memory"
751 A_PRINTF("\n\rread 0x%08x (0x%08x) use %d clocks\n\r", data1, data, ccount2-ccount1);
754 __asm__ __volatile__ (
756 : "=a" (ccount1) : : "memory"
758 data = *(volatile uint32_t *)(data2);
759 __asm__ __volatile__ (
761 : "=a" (ccount2) : : "memory"
763 A_PRINTF("read 0x%08x (0x%08x) use %d clocks\n\r", data2, data, ccount2-ccount1);
766 __asm__ __volatile__ (
768 : "=a" (ccount1) : : "memory"
770 data = *(volatile uint32_t *)(data3);
771 __asm__ __volatile__ (
773 : "=a" (ccount2) : : "memory"
775 A_PRINTF("read 0x%08x (0x%08x) use %d clocks\n\r", data3, data, ccount2-ccount1);
782 int db_cmd_dbg(char* cmd, char* param1, char* param2, char* param3)
786 int db_cmd_dmips(char* cmd, char* param1, char* param2, char* param3)
791 int db_cmd_starthtc(char* cmd, char* param1, char* param2, char* param3)
793 extern htc_handle_t htc_handle;
794 HTC_Ready(htc_handle);
797 int db_cmd_memtest(char* cmd, char* param1, char* param2, char* param3)
806 #define WRITE_USB_DESC(pDesc, Offset) \
808 uint16_t *pSrc = 0; \
809 uint16_t mSize = 0; \
810 pSrc = (uint16_t *)(pDesc); \
811 mSize = (*pSrc&0xff)/2; \
812 A_PRINTF("0x%04x, 0x%04x, 0x%08x\n", Offset, mSize, pSrc); \
813 A_EEP_WRITE(Offset, mSize, pSrc); \
814 A_DELAY_USECS(500); \
817 #define READ_USB_DESC(pDesc, Offset, Size) \
821 pDst = (uint16_t *)pDesc; \
822 A_EEP_READ(Offset, 1, &mSize); \
823 mSize = mSize &0xff; \
827 A_PRINTF("0x%04x, 0x%04x, 0x%08x\n", Offset, mSize, pDst); \
828 A_EEP_READ(Offset, mSize, pDst); \
829 A_DELAY_USECS(500); \
833 ////////////////////////////////////////////////////////////////////////////////////////////////
835 extern uint16_t UsbDeviceDescriptor[];
836 extern uint16_t String00Descriptor[];
837 extern uint16_t String10Descriptor[];
838 extern uint16_t String20Descriptor[];
839 extern uint16_t String30Descriptor[];
841 int db_eeprom_cmd(char* cmd, char* param1, char* param2, char* param3)
846 int db_wdt_cmd(char* cmd, char* param1, char* param2, char* param3)
848 if ( strcmp(param1, "rst") == 0 )
850 A_PRINTF(" reseting.....................\n\n\r");
853 else if( strcmp(param1, "on") == 0 )
857 else if (strcmp(param1, "off") == 0 )
861 else if ( strcmp(param1, "boot") == 0 )
863 if (ENUM_WDT_BOOT == A_WDT_LASTBOOT() )
864 A_PRINTF("LAST BOOT IS %s", "wdt");
866 A_PRINTF("LAST BOOT IS %s", "normal boot");
868 else if (strcmp(param1, "loop") == 0 )
871 uint32_t time_offset;
872 A_PRINTF(" doing the wdt reseting................\n\n\r");
874 if( db_ascii_to_hex(param2, &time_offset)!=0 )
876 if( time_offset < 0 || time_offset >0xffffffff )
877 time_offset = 0xffffff;
879 A_PRINTF(" doing the wdt reseting (wdt tick: 0x%08x................\n\n\r", time_offset);
880 wdt_cmd.cmd = WDT_TIMEOUT;
881 wdt_cmd.timeout = time_offset;
886 else if (strcmp(param1, "noloop") == 0 )
889 uint32_t time_offset;
890 A_PRINTF(" doing the wdt reseting................\n\n\r");
892 if( db_ascii_to_hex(param3, &time_offset)!=0 )
894 if( time_offset < 0 || time_offset >0xffffffff )
895 time_offset = 0xffffff;
897 A_PRINTF(" doing the wdt reseting (wdt tick: 0x%08x................\n\n\r", time_offset);
899 wdt_cmd.cmd = WDT_TIMEOUT;
900 wdt_cmd.timeout = time_offset;
904 else if( strcmp(param1, "event") == 0 )
906 uint32_t event= 0x00123400;
907 #define USB_BYTE_REG_WRITE(addr, val) HAL_BYTE_REG_WRITE(USB_CTRL_BASE_ADDRESS|(uint8_t)(addr^3), (val))
908 #define USB_BYTE_REG_READ(addr) HAL_BYTE_REG_READ(USB_CTRL_BASE_ADDRESS|(uint8_t)(addr^3))
910 #define USB_WORD_REG_WRITE(addr, val) HAL_WORD_REG_WRITE(USB_CTRL_BASE_ADDRESS|(uint32_t)(addr), (val))
911 #define USB_WORD_REG_READ(addr) HAL_WORD_REG_READ(USB_CTRL_BASE_ADDRESS|(uint32_t)(addr))
914 USB_BYTE_REG_WRITE(0x17, USB_BYTE_REG_READ(0x17)|0xc0);
916 //ZM_CBUS_FIFO_SIZE_REG = 0xf;
917 USB_WORD_REG_WRITE(0x100, 0x0f);
919 //ZM_EP3_DATA_REG = event;
920 USB_WORD_REG_WRITE(0xF8, event);
923 USB_BYTE_REG_WRITE(0xAE, USB_BYTE_REG_READ(0xAE)|0x08);
926 USB_BYTE_REG_WRITE(0x17, USB_BYTE_REG_READ(0x17)&0xbf);
930 #if defined(PROJECT_K2)
931 #if SYSTEM_MODULE_SFLASH
932 /* Serial Flash -> Chip Erase, Sector Erase, Block Erase */
933 int db_cmd_sferase(char* cmd, char* param1, char* param2, char* param3)
937 if (strcmp(param1, "s") == 0)
939 if (db_ascii_to_hex(param2, &addr) != -1 && addr < SPI_FLASH_MAX_SIZE)
941 /* Sector size is 4K (0x1000) */
942 A_PRINTF("Sector addr : 0x%08X\n\r", addr - addr%0x1000);
943 A_SFLASH_ERASE(ZM_SFLASH_SECTOR_ERASE, addr);
949 A_PRINTF("Error! Incorrect format.\n\r");
953 else if (strcmp(param2, "b") == 0)
955 if (db_ascii_to_hex(param2, &addr) != -1 && addr < SPI_FLASH_MAX_SIZE)
957 /* Sector size is 64K (0x10000) */
958 A_PRINTF("Block addr : 0x%08X\n\r", addr - addr%0x10000);
959 A_SFLASH_ERASE(ZM_SFLASH_BLOCK_ERASE, addr);
965 A_PRINTF("Error! Incorrect format.\n\r");
969 else if (strcmp(param1, "c") == 0)
971 A_SFLASH_ERASE(ZM_SFLASH_CHIP_ERASE, addr);
978 A_PRINTF("Error! Unknown command.\n\r");
983 /* Serial Flash -> Program */
984 int db_cmd_sfpg(char* cmd, char* param1, char* param2, char* param3)
986 unsigned long addr, len, buf;
988 if (db_ascii_to_hex(param1, &addr) != -1 &&
989 db_ascii_to_hex(param2, &len) != -1 &&
990 db_ascii_to_hex(param3, &buf) != -1 &&
991 ((addr+len) <= SPI_FLASH_MAX_SIZE) &&
992 addr%4 == 0 && len%4 == 0 && buf%4 == 0 &&
993 ((buf >=0x500000 && buf < 0x528000) || (buf >=0x4e0000 && buf < 0x4e6000)) )
995 A_SFLASH_PROG(addr, len, (A_UINT8 *)buf);
1002 A_PRINTF("Error! Incorrect format.\n\r");
1007 /* Serial Flash -> Read, Fast Read to UART */
1008 int db_cmd_sfru(char* cmd, char* param1, char* param2, char* param3)
1011 unsigned long addr1, addr2, t_addr;
1014 if (strcmp(param1, "r") == 0)
1016 else if (strcmp(param1, "f") == 0)
1020 A_PRINTF("Error! Unknown command.\n\r");
1024 if (db_ascii_to_hex(param2, &addr1) != -1 &&
1025 db_ascii_to_hex(param3, &addr2) != -1 &&
1026 addr1 < addr2 && addr1 < SPI_FLASH_MAX_SIZE &&
1027 addr2 < SPI_FLASH_MAX_SIZE && addr1%4 == 0)
1029 A_PRINTF("addr data data data data data data data data\n\r");
1030 A_PRINTF("====== ======== ======== ======== ======== ======== ======== ======== ========");
1032 for (i = 0, t_addr = addr1; t_addr < addr2; i++, t_addr += 4)
1035 A_PRINTF("\n\r%06X ", t_addr);
1037 A_SFLASH_READ(fast, t_addr, 4, (A_UINT8 *)&val);
1038 A_PRINTF("%08X ", val);
1046 A_PRINTF("Error! Incorrect format.\n\r");
1051 /* Serial Flash -> Read, Fast Read to Memory */
1052 int db_cmd_sfrm(char* cmd, char* param1, char* param2, char* param3)
1055 unsigned long addr1, addr2, t_addr;
1057 A_UINT8 *buf = (A_UINT8 *)0x520000;
1059 if (strcmp(param1, "r") == 0)
1061 else if (strcmp(param1, "f") == 0)
1065 A_PRINTF("Error! Unknown command.\n\r");
1069 if (db_ascii_to_hex(param2, &addr1) != -1 &&
1070 db_ascii_to_hex(param3, &addr2) != -1 &&
1071 addr1 < addr2 && addr1 < SPI_FLASH_MAX_SIZE &&
1072 addr2 < SPI_FLASH_MAX_SIZE && addr1%4 == 0)
1074 for (i = 0, t_addr = addr1; t_addr < addr2; i++, t_addr += 4)
1076 A_SFLASH_READ(fast, t_addr, 4, buf + i*4);
1084 A_PRINTF("Error! Incorrect format.\n\r");
1089 /* Serial Flash -> Read Status Register */
1090 int db_cmd_sfrdsr(char* cmd, char* param1, char* param2, char* param3)
1092 A_PRINTF("0x%02X\n\r", A_SFLASH_RDSR());
1096 #endif /* #if defined(PROJECT_K2) */
1098 /* Memory Comparison */
1099 int db_cmd_memcmp(char* cmd, char* param1, char* param2, char* param3)
1101 unsigned long addr1, addr2, len;
1102 A_UINT8 *buf1, *buf2;
1104 if (db_ascii_to_hex(param1, &addr1) != -1 &&
1105 db_ascii_to_hex(param2, &addr2) != -1 &&
1106 db_ascii_to_hex(param3, &len) != -1 &&
1107 addr1 != addr2 && addr1%4 == 0 && addr2%4 == 0 && len%4 == 0)
1109 buf1 = (A_UINT8 *)addr1;
1110 buf2 = (A_UINT8 *)addr2; ;
1112 A_PRINTF("memcmp(buf1, buf2, len) = %d\n\r", A_MEMCMP(buf1, buf2, len));
1117 A_PRINTF("Error! Incorrect format.\n\r");
1123 int db_cmd_memdump(char* cmd, char* param1, char* param2, char* param3)
1126 unsigned long addr1, addr2, t_addr;
1129 if (db_ascii_to_hex(param1, &addr1) != -1 && db_ascii_to_hex(param2, &addr2) != -1 && addr1 < addr2 && addr1%4 == 0)
1131 A_PRINTF("addr data data data data data data data data\n\r");
1132 A_PRINTF("====== ======== ======== ======== ======== ======== ======== ======== ========");
1134 for (i = 0, t_addr = addr1; t_addr < addr2; i++, t_addr += 4)
1137 A_PRINTF("\n\r%06X ", t_addr);
1139 val = (A_UINT32 *)t_addr;
1140 A_PRINTF("%08X ", *val);
1148 A_PRINTF("Error! Incorrect format.\n\r");
1152 void cmnos_dbg_module_install(struct dbg_api *apis)
1154 apis->_dbg_init = zfDebugInit;
1155 apis->_dbg_task = zfDebugTask;
1158 #endif /* SYSTEM_MODULE_DBG */