📄 nf.c
字号:
nf_parity_bit = ((Byte*)&gl_ptr_mem)[3] & 0x01;
return OK;
}
/*F**************************************************************************
* NAME: nf_read_close
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE:
* Low level memory read close
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void nf_read_close (void)
{
}
/*F*************************************************************************
* NAME: nf_read_byte
*---------------------------------------------------------------------------
* PARAMS:
*
* return:
* Data read from memory
*---------------------------------------------------------------------------
* PURPOSE:
* Low level memory read function
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
****************************************************************************/
Byte nf_read_byte (void)
{
Byte b;
if (nf_busy)
{
nf_busy = FALSE;
if (nf_parity_bit == NF_ODD)
{
Nf_active_ODD();
Nf_wait_busy_odd();
Nf_send_command_odd(NF_READ_CMD);
Nf_send_address_odd( 0x00);
Nf_send_address_odd( ((Byte*)&gl_cpt_page)[0]);
Nf_send_address_odd( ((Byte*)&nf_current_physical_sector_addr_odd)[3]);
Nf_send_address_odd( ((Byte*)&nf_current_physical_sector_addr_odd)[2]);
if (NF_5_CYCLE_ADDRESS_BIT) /* Size of card >= 128Mbytes ? */
Nf_send_address_odd ( ((Byte*)&nf_current_physical_sector_addr_odd)[1] ); /* Row address Byte 2 */
Nf_send_command_odd(NF_READ_CMD2);
Nf_wait_busy_odd();
b = Nf_rd_byte_odd();
}
else
{
Nf_active_EVEN();
Nf_wait_busy_even();
Nf_send_command_even(NF_READ_CMD);
Nf_send_address_even( 0x00);
Nf_send_address_even( ((Byte*)&gl_cpt_page)[0]);
Nf_send_address_even( ((Byte*)&nf_current_physical_sector_addr_even)[3]);
Nf_send_address_even( ((Byte*)&nf_current_physical_sector_addr_even)[2]);
if (NF_5_CYCLE_ADDRESS_BIT) /* Size of card >= 128Mbytes ? */
Nf_send_address_even ( ((Byte*)&nf_current_physical_sector_addr_even)[1] ); /* Row address Byte 2 */
Nf_send_command_even(NF_READ_CMD2);
Nf_wait_busy_even();
b = Nf_rd_byte_even();
}
}
else
{
b = (nf_parity_bit == NF_ODD) ? Nf_rd_byte_odd() : Nf_rd_byte_even();
}
gl_cpt_page++;
if ( ((Byte*)&gl_cpt_page)[0] == 0x08) /* Detection of the end of data page */
{
gl_ptr_mem++; /* new page */
if ( !(((Byte*)&gl_ptr_mem)[3] & 0x7F) ) /* New block ? */
{
nf_read_open(gl_ptr_mem << 2);
}
else
{
gl_cpt_page = 0; /* reset column */
(nf_parity_bit == NF_ODD) ? ((Byte*)&nf_current_physical_sector_addr_odd)[3]++ :
((Byte*)&nf_current_physical_sector_addr_even)[3]++ ;
nf_parity_bit = ~nf_parity_bit; /* change slot */
nf_busy = TRUE; /* Force read open command */
}
}
return b;
}
/*F**************************************************************************
* NAME: nf_read_sector
*----------------------------------------------------------------------------
* PARAMS:
* nb_sector: number of contiguous sector to read
* global: gl_ptr_mem
*
* return: OK read done
* KO read failure
*----------------------------------------------------------------------------
* PURPOSE:
* This function is an optimized function that writes nb-sector * 512 bytes
* from NF to USB controller
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
* nb_sector always >= 1, can not be zero
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
bit nf_read_sector(Uint16 nb_sector)
{
Byte i;
bit begin_ping_pong;
begin_ping_pong = TRUE;
do
{
if (nf_busy)
{
if (nf_parity_bit == NF_ODD)
{
Nf_active_ODD();
Nf_wait_busy_odd();
Nf_send_command_odd(NF_READ_CMD);
Nf_send_address_odd( 0x00);
Nf_send_address_odd( ((Byte*)&gl_cpt_page)[0]);
Nf_send_address_odd( ((Byte*)&nf_current_physical_sector_addr_odd)[3]);
Nf_send_address_odd( ((Byte*)&nf_current_physical_sector_addr_odd)[2]);
if (NF_5_CYCLE_ADDRESS_BIT) /* Size of card >= 128Mbytes ? */
Nf_send_address_odd ( ((Byte*)&nf_current_physical_sector_addr_odd)[1] ); /* Row address Byte 2 */
Nf_send_command_odd(NF_READ_CMD2);
Nf_wait_busy_odd();
}
else
{
Nf_active_EVEN();
Nf_wait_busy_even();
Nf_send_command_even(NF_READ_CMD);
Nf_send_address_even( 0x00);
Nf_send_address_even( ((Byte*)&gl_cpt_page)[0]);
Nf_send_address_even( ((Byte*)&nf_current_physical_sector_addr_even)[3]);
Nf_send_address_even( ((Byte*)&nf_current_physical_sector_addr_even)[2]);
if (NF_5_CYCLE_ADDRESS_BIT) /* Size of card >= 128Mbytes ? */
Nf_send_address_even ( ((Byte*)&nf_current_physical_sector_addr_even)[1] ); /* Row address Byte 2 */
Nf_send_command_even(NF_READ_CMD2);
Nf_wait_busy_even();
}
nf_busy = FALSE;
}
if (nf_parity_bit == NF_ODD)
{
for (i = 8; i != 0; i--)
{
Usb_write_byte(Nf_rd_byte_odd()); /* read 64 bytes from card */
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
Usb_write_byte(Nf_rd_byte_odd());
if (begin_ping_pong)
{
begin_ping_pong = FALSE;
}
else
{
while (!Usb_tx_complete()); /* wait end of transfer */
Usb_clear_TXCMPL(); /* ack transfer */
}
Usb_set_TXRDY(); /* start usb transfer */
}
}
else
{
for (i = 8; i != 0; i--)
{
Usb_write_byte(Nf_rd_byte_even()); /* read 64 bytes from card */
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
Usb_write_byte(Nf_rd_byte_even());
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -