URL
https://opencores.org/ocsvn/usb_nand_reader/usb_nand_reader/trunk
Subversion Repositories usb_nand_reader
[/] [usb_nand_reader/] [trunk/] [mini32/] [main.cp] - Rev 7
Compare with Previous | Blame | View Log
#line 1 "H:/MINI32/MINI-32 Examples/MINI-32 mikroC PRO for PIC32 Examples/MINI32_NAND_Controller/main.c"
#line 1 "h:/mini32/mini-32 examples/mini-32 mikroc pro for pic32 examples/mini32_nand_controller/nanddataline.h"
void init_nand_data_line();
void init_nand_control_line();
void data_line_write_byte(unsigned char b);
unsigned char data_line_read_byte();
#line 1 "h:/mini32/mini-32 examples/mini-32 mikroc pro for pic32 examples/mini32_nand_controller/nandcontrol.h"
void init_nand_control_line();
int nand_is_ready();
void nand_wait_ready();
void nand_chip_select(int idx);
void nand_chip_unselect();
void nand_send_command(unsigned char cmd);
void nand_send_address(unsigned char* addr, int len);
void nand_write(unsigned char* buffer, int len);
void nand_read(unsigned char* buffer, int len);
void nand_toggle_wp();
void blink(int i);
#line 1 "h:/mini32/mini-32 examples/mini-32 mikroc pro for pic32 examples/mini32_nand_controller/cmd.h"
#line 38 "h:/mini32/mini-32 examples/mini-32 mikroc pro for pic32 examples/mini32_nand_controller/cmd.h"
void do_delay(int cycles);
void cmd_chip_enable(unsigned char* cmd);
void cmd_chip_disable();
void cmd_chip_reset();
void cmd_chip_read_id(unsigned char* outBuffer, int addr);
void cmd_chip_read_param_page(unsigned char* outBuffer);
void cmd_chip_read_page(unsigned char* inBuffer, unsigned char* outBuffer, int len, int addressCycles);
void cmd_chip_read_page_cache_sequential(unsigned char* inBuffer, unsigned char* outBuffer, int len, int addressCylces);
unsigned char cmd_chip_read_status();
unsigned char cmd_chip_read_status_enhanced(unsigned char* inBuffer, int addressCycles);
void cmd_chip_read_unique_id(unsigned char* outBuffer);
void cmd_chip_block_erase(unsigned char* inBuffer);
unsigned char cmd_chip_page_program(unsigned char* inBuffer, int addressCycles, int pageSize);
#line 32 "H:/MINI32/MINI-32 Examples/MINI-32 mikroC PRO for PIC32 Examples/MINI32_NAND_Controller/main.c"
sbit CE_ON at LATG6_bit;
sbit DAT_ON at LATD6_bit;
char cnt;
char kk;
char readbuff[64];
char writebuff[1024*3];
unsigned char* onfiParamPage = (unsigned char*)0;
int pageSize = 0;
int addressCycles = 0;
int busWidth = 8;
char isOnfi = 0;
unsigned char nandId[5];
void main(void)
{
char hasId = 0;
char hasOnfiParameterPage = 0;
AD1PCFG = 0xFFFF;
TRISG6_bit = 0;
LATG6_bit = 0;
TRISD6_bit = 0;
LATD6_bit = 0;
init_nand_data_line();
init_nand_control_line();
MM_Init();
HID_Enable(&readbuff,&writebuff);
if(U1CON.JSTATE == 0)
{
LATG6_bit = 1;
Delay_ms(1000);
LATG6_bit = 0;
}
else
{
LATD6_bit = 1;
Delay_ms(1000);
LATD6_bit = 0;
}
while(1)
{
USB_Polling_Proc();
kk = HID_Read();
if(kk != 0)
{
switch(readbuff[0])
{
case 1 :
cmd_chip_enable(readbuff);
CE_ON = 1;
break;
case 2 :
cmd_chip_disable();
CE_ON = 0;
break;
case 3 :
DAT_ON = 1;
cmd_chip_reset();
DAT_ON = 0;
break;
case 4 :
DAT_ON = 1;
cmd_chip_read_id(writebuff, 0);
nandId[0] = writebuff[0];
nandId[1] = writebuff[1];
nandId[2] = writebuff[2];
nandId[3] = writebuff[3];
nandId[4] = writebuff[4];
HID_Write(&writebuff, 64);
hasId = 1;
DAT_ON = 0;
break;
case 5 :
DAT_ON = 1;
cmd_chip_read_id(writebuff, 0x20);
if('O' == writebuff[0] && 'N' == writebuff[1] && 'F' == writebuff[2] && 'I' == writebuff[3])
{
isOnfi = 1;
onfiParamPage = Malloc(0x100);
if(0 == onfiParamPage)
isOnfi = 0;
}
HID_Write(&writebuff, 64);
DAT_ON = 0;
break;
case 6 :
DAT_ON = 1;
if(0 != onfiParamPage)
{
int i, j;
cmd_chip_read_param_page(onfiParamPage);
for(i = 0; i < 4; i++)
{
for(j = 0; j < 64; j++)
{
writebuff[j] = onfiParamPage[i * 64 + j];
}
HID_Write(&writebuff, 64);
}
hasOnfiParameterPage = 1;
busWidth = 8 << (onfiParamPage[6] & 1);
}
else
{
writebuff[0] = 0;
HID_Write(&writebuff, 64);
}
DAT_ON = 0;
break;
case 7 :
if(0 == hasId && 0 == hasOnfiParameterPage)
{
DAT_ON = 0;
break;
}
if(hasOnfiParameterPage)
{
pageSize = *(unsigned int*)(onfiParamPage + 80) + *(unsigned short*)(onfiParamPage + 84);
addressCycles = (*(onfiParamPage + 101) & 0x0f) + (*(onfiParamPage + 101) >> 4);
}
DAT_ON = 1;
cmd_chip_read_page(readbuff, writebuff, pageSize, addressCycles);
DAT_ON = 0;
break;
case 8 :
DAT_ON = 1;
pageSize = *(int*)(readbuff + 1);
addressCycles = *(readbuff + 5);
busWidth = *(readbuff + 6);
DAT_ON = 0;
break;
case 9 :
if(0 == hasId && 0 == hasOnfiParameterPage)
{
DAT_ON = 0;
break;
}
if(hasOnfiParameterPage)
{
pageSize = *(unsigned int*)(onfiParamPage + 80) + *(unsigned short*)(onfiParamPage + 84);
addressCycles = (*(onfiParamPage + 101) & 0x0f) + (*(onfiParamPage + 101) >> 4);
}
DAT_ON = 1;
if(0 != pageSize)
{
USB_Polling_Proc();
cmd_chip_read_page_cache_sequential(readbuff, writebuff, pageSize, addressCycles);
}
DAT_ON = 0;
break;
case 10 :
writebuff[0] = cmd_chip_read_status();
HID_Write(&writebuff, 64);
break;
case 11 :
DAT_ON = 1;
cmd_chip_read_unique_id(writebuff);
HID_Write(&writebuff, 64);
DAT_ON = 0;
break;
case 12 :
DAT_ON = 1;
cmd_chip_block_erase(readbuff);
DAT_ON = 0;
break;
case 13 :
nand_toggle_wp();
break;
case 14 :
DAT_ON = 1;
if(0 != pageSize)
cmd_chip_page_program(readbuff, addressCycles, pageSize);
DAT_ON = 0;
break;
case 15 :
writebuff[0] = cmd_chip_read_status_enhanced(readbuff, addressCycles);
HID_Write(&writebuff, 64);
break;
default:
break;
}
}
}
#line 259 "H:/MINI32/MINI-32 Examples/MINI-32 mikroC PRO for PIC32 Examples/MINI32_NAND_Controller/main.c"
}