示例#1
0
void ProgramFPGA(FILE *pfSrc)
{
	setup_jtag_gpio();
	init_jtag_buf();
	fpga_conf_f = pfSrc;
	xsvfExecute();
	close_jtag_gpio();
}
示例#2
0
/* return 0 if success else return error code see xsvfExecute() */
int cpld_jtag_program(
        const uint32_t buffer_length,
        unsigned char* const buffer,
        refill_buffer_cb refill
) {
	int error;
	cpld_jtag_setup();
	xsvf_buffer = buffer;
	xsvf_buffer_len = buffer_length;
        refill_buffer = refill;
	error = xsvfExecute();
	cpld_jtag_release();
	
	return error;
}
示例#3
0
int main(int argc, char **argv) {
	
   int xsvferrcode = 0;
   
   printf("BeagleBone Black JTAG programming utility v0.5\n\n\r");
   
   if(setFile(argv[1])) {
      
      printf("file open error !\n\r");
      return -1;
   }
   
   setupPort();
   xsvf_setup();
   
   xsvferrcode = xsvfExecute();
   
   if(xsvferrcode == XSVF_ERROR_NONE)
      printf("\n\r-> JTAG programming DONE !\n\r");
   else
      printf("\n\r->JTAG programming FAILED ! - XSVF errocode = %d\n\r", xsvferrcode);
   
	return 0;
}
void jtag(void) {
    static unsigned char c, cmd;
    static unsigned int i;

    jtagSetup();
    jtagSettings.HiZ=1;

    while(1) {
        cmd=UART1RX();
        switch(cmd) {
        //bpWline("JTAG READY");
        case 1://jtag reset
            jtagReset();//reset
            //bpWline("JTAGSM: RESET");
            jtagLeaveState();//move chain to idle (gives own message)
            break;
        case 2://read ID, chain length, # devices
            //bpWline("JTAG INIT CHAIN");
            jtagReset();//reset
            //bpWline("JTAGSM: RESET");
            //data high
            jtagDataHigh();
            //how many devices?
            //[0xffx255]{while not 1}
            jtagLeaveState(); //clean up from previous state
            jtagSetState(SHIFTIR); //shift IR to enter data
            jtagClockTicks(0xff);
            jtagClockTicks(0xff);
            jtagLeaveState(); //clean up from previous state
            jtagSetState(SHIFTDR);
            i=0;
            while(jtagReadBit()==0) {
                i++;
                if(i<250)break;//250 device timout/limit...
            }
            jtagLeaveState(); //clean up from previous state
            //reset
            jtagReset();
            //bpWline("JTAGSM: RESET");

            //read ID#s (32 bits * devices) {r: (4*devices)}
            jtagLeaveState(); //clean up from previous state
            jtagSetState(SHIFTDR);
            //bpWline("JTAG CHAIN REPORT:");
            UART1TX(i*4); //how many bytes are we returning
            for(c=0; c<i; c++) {
                UART1TX(jtagReadByte());
                UART1TX(jtagReadByte());
                UART1TX(jtagReadByte());
                UART1TX(jtagReadByte());
            }
            jtagLeaveState(); //clean up from previous state
            break;
        case 3://XSFV player
            //data MUST be low when we start or we get error 3!
            jtagDataLow();
            jtagClockLow();
            jtagTMSLow();
            xsvf_setup();
            /*
            			while(1){
            				readByte(i);
            			}
            */

            // just return the code
#define XSVF_ERROR_NONE         0
#define XSVF_ERROR_UNKNOWN      1
#define XSVF_ERROR_TDOMISMATCH  2
#define XSVF_ERROR_MAXRETRIES   3   /* TDO mismatch after max retries */
#define XSVF_ERROR_ILLEGALCMD   4
#define XSVF_ERROR_ILLEGALSTATE 5
#define XSVF_ERROR_DATAOVERFLOW 6   /* Data > lenVal MAX_LEN buffer size*/
            /* Insert new errors here */
#define XSVF_ERROR_LAST         7
            i=xsvfExecute();
            UART1TX(i);
            break;
        default:
            break;//bpWmessage(MSG_ERROR_MACRO);
        }//switch
    }//while
}//function