OpenCores
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"
}

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.