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] - Blame information for rev 7

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 7 pradd
#line 1 "H:/MINI32/MINI-32 Examples/MINI-32 mikroC PRO for PIC32 Examples/MINI32_NAND_Controller/main.c"
2
#line 1 "h:/mini32/mini-32 examples/mini-32 mikroc pro for pic32 examples/mini32_nand_controller/nanddataline.h"
3
 
4
 
5
 
6
 
7
 
8
 
9
 
10
void init_nand_data_line();
11
void init_nand_control_line();
12
void data_line_write_byte(unsigned char b);
13
unsigned char data_line_read_byte();
14
#line 1 "h:/mini32/mini-32 examples/mini-32 mikroc pro for pic32 examples/mini32_nand_controller/nandcontrol.h"
15
 
16
 
17
 
18
void init_nand_control_line();
19
int nand_is_ready();
20
void nand_wait_ready();
21
void nand_chip_select(int idx);
22
void nand_chip_unselect();
23
 
24
void nand_send_command(unsigned char cmd);
25
void nand_send_address(unsigned char* addr, int len);
26
void nand_write(unsigned char* buffer, int len);
27
void nand_read(unsigned char* buffer, int len);
28
void nand_toggle_wp();
29
 
30
void blink(int i);
31
#line 1 "h:/mini32/mini-32 examples/mini-32 mikroc pro for pic32 examples/mini32_nand_controller/cmd.h"
32
#line 38 "h:/mini32/mini-32 examples/mini-32 mikroc pro for pic32 examples/mini32_nand_controller/cmd.h"
33
void do_delay(int cycles);
34
 
35
void cmd_chip_enable(unsigned char* cmd);
36
void cmd_chip_disable();
37
void cmd_chip_reset();
38
void cmd_chip_read_id(unsigned char* outBuffer, int addr);
39
void cmd_chip_read_param_page(unsigned char* outBuffer);
40
void cmd_chip_read_page(unsigned char* inBuffer, unsigned char* outBuffer, int len, int addressCycles);
41
void cmd_chip_read_page_cache_sequential(unsigned char* inBuffer, unsigned char* outBuffer, int len, int addressCylces);
42
unsigned char cmd_chip_read_status();
43
unsigned char cmd_chip_read_status_enhanced(unsigned char* inBuffer, int addressCycles);
44
void cmd_chip_read_unique_id(unsigned char* outBuffer);
45
void cmd_chip_block_erase(unsigned char* inBuffer);
46
unsigned char cmd_chip_page_program(unsigned char* inBuffer, int addressCycles, int pageSize);
47
#line 32 "H:/MINI32/MINI-32 Examples/MINI-32 mikroC PRO for PIC32 Examples/MINI32_NAND_Controller/main.c"
48
sbit CE_ON at LATG6_bit;
49
sbit DAT_ON at LATD6_bit;
50
 
51
char cnt;
52
char kk;
53
char readbuff[64];
54
 
55
char writebuff[1024*3];
56
 
57
unsigned char* onfiParamPage = (unsigned char*)0;
58
int pageSize = 0;
59
int addressCycles = 0;
60
int busWidth = 8;
61
char isOnfi = 0;
62
unsigned char nandId[5];
63
 
64
void main(void)
65
{
66
 char hasId = 0;
67
 char hasOnfiParameterPage = 0;
68
 
69
 AD1PCFG = 0xFFFF;
70
 TRISG6_bit = 0;
71
 LATG6_bit = 0;
72
 TRISD6_bit = 0;
73
 LATD6_bit = 0;
74
 
75
 init_nand_data_line();
76
 init_nand_control_line();
77
 
78
 MM_Init();
79
 
80
 HID_Enable(&readbuff,&writebuff);
81
 if(U1CON.JSTATE == 0)
82
 {
83
 LATG6_bit = 1;
84
 Delay_ms(1000);
85
 LATG6_bit = 0;
86
 }
87
 else
88
 {
89
 LATD6_bit = 1;
90
 Delay_ms(1000);
91
 LATD6_bit = 0;
92
 }
93
 
94
 
95
 while(1)
96
 {
97
 USB_Polling_Proc();
98
 
99
 kk = HID_Read();
100
 if(kk != 0)
101
 {
102
 switch(readbuff[0])
103
 {
104
 case  1 :
105
 cmd_chip_enable(readbuff);
106
 CE_ON = 1;
107
 break;
108
 
109
 case  2 :
110
 cmd_chip_disable();
111
 CE_ON = 0;
112
 break;
113
 
114
 case  3 :
115
 DAT_ON = 1;
116
 cmd_chip_reset();
117
 DAT_ON = 0;
118
 break;
119
 
120
 case  4 :
121
 DAT_ON = 1;
122
 cmd_chip_read_id(writebuff, 0);
123
 nandId[0] = writebuff[0];
124
 nandId[1] = writebuff[1];
125
 nandId[2] = writebuff[2];
126
 nandId[3] = writebuff[3];
127
 nandId[4] = writebuff[4];
128
 HID_Write(&writebuff, 64);
129
 hasId = 1;
130
 DAT_ON = 0;
131
 break;
132
 
133
 case  5 :
134
 DAT_ON = 1;
135
 cmd_chip_read_id(writebuff, 0x20);
136
 if('O' == writebuff[0] && 'N' == writebuff[1] && 'F' == writebuff[2] && 'I' == writebuff[3])
137
 {
138
 isOnfi = 1;
139
 onfiParamPage = Malloc(0x100);
140
 if(0 == onfiParamPage)
141
 isOnfi = 0;
142
 }
143
 HID_Write(&writebuff, 64);
144
 DAT_ON = 0;
145
 break;
146
 
147
 case  6 :
148
 DAT_ON = 1;
149
 if(0 != onfiParamPage)
150
 {
151
 int i, j;
152
 cmd_chip_read_param_page(onfiParamPage);
153
 for(i = 0; i < 4; i++)
154
 {
155
 for(j = 0; j < 64; j++)
156
 {
157
 writebuff[j] = onfiParamPage[i * 64 + j];
158
 }
159
 HID_Write(&writebuff, 64);
160
 }
161
 hasOnfiParameterPage = 1;
162
 busWidth = 8 << (onfiParamPage[6] & 1);
163
 }
164
 else
165
 {
166
 writebuff[0] = 0;
167
 HID_Write(&writebuff, 64);
168
 }
169
 DAT_ON = 0;
170
 break;
171
 
172
 case  7 :
173
 
174
 if(0 == hasId && 0 == hasOnfiParameterPage)
175
 {
176
 DAT_ON = 0;
177
 break;
178
 }
179
 
180
 if(hasOnfiParameterPage)
181
 {
182
 pageSize = *(unsigned int*)(onfiParamPage + 80) + *(unsigned short*)(onfiParamPage + 84);
183
 addressCycles = (*(onfiParamPage + 101) & 0x0f) + (*(onfiParamPage + 101) >> 4);
184
 }
185
 DAT_ON = 1;
186
 cmd_chip_read_page(readbuff, writebuff, pageSize, addressCycles);
187
 DAT_ON = 0;
188
 break;
189
 
190
 case  8 :
191
 DAT_ON = 1;
192
 pageSize = *(int*)(readbuff + 1);
193
 addressCycles = *(readbuff + 5);
194
 busWidth = *(readbuff + 6);
195
 DAT_ON = 0;
196
 break;
197
 
198
 case  9 :
199
 
200
 if(0 == hasId && 0 == hasOnfiParameterPage)
201
 {
202
 DAT_ON = 0;
203
 break;
204
 }
205
 
206
 if(hasOnfiParameterPage)
207
 {
208
 pageSize = *(unsigned int*)(onfiParamPage + 80) + *(unsigned short*)(onfiParamPage + 84);
209
 addressCycles = (*(onfiParamPage + 101) & 0x0f) + (*(onfiParamPage + 101) >> 4);
210
 }
211
 DAT_ON = 1;
212
 if(0 != pageSize)
213
 {
214
 USB_Polling_Proc();
215
 cmd_chip_read_page_cache_sequential(readbuff, writebuff, pageSize, addressCycles);
216
 }
217
 DAT_ON = 0;
218
 break;
219
 
220
 case  10 :
221
 writebuff[0] = cmd_chip_read_status();
222
 HID_Write(&writebuff, 64);
223
 break;
224
 
225
 case  11 :
226
 DAT_ON = 1;
227
 cmd_chip_read_unique_id(writebuff);
228
 HID_Write(&writebuff, 64);
229
 DAT_ON = 0;
230
 break;
231
 
232
 case  12 :
233
 DAT_ON = 1;
234
 cmd_chip_block_erase(readbuff);
235
 DAT_ON = 0;
236
 break;
237
 
238
 case  13 :
239
 nand_toggle_wp();
240
 break;
241
 
242
 case  14 :
243
 DAT_ON = 1;
244
 if(0 != pageSize)
245
 cmd_chip_page_program(readbuff, addressCycles, pageSize);
246
 DAT_ON = 0;
247
 break;
248
 
249
 case  15 :
250
 writebuff[0] = cmd_chip_read_status_enhanced(readbuff, addressCycles);
251
 HID_Write(&writebuff, 64);
252
 break;
253
 
254
 default:
255
 break;
256
 }
257
 }
258
 }
259
#line 259 "H:/MINI32/MINI-32 Examples/MINI-32 mikroC PRO for PIC32 Examples/MINI32_NAND_Controller/main.c"
260
}

powered by: WebSVN 2.1.0

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