nand_media.c
来自「U盘控制器USB97C223的固件代码,对2kPAGE NAND FLASH 有」· C语言 代码 · 共 559 行 · 第 1/2 页
C
559 行
// Purpose:
//
// Arguments:
//
// Return:
//
// Notes:
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
t_result nand_read_sector(void) reentrant
{
trace4(0, nand, 0, "nand_read_sector() - zone:%d RD_PHY:%d log:%d page:%d", g_addr_zone, g_addr_rd_phy_blk, g_addr_log_blk, g_addr_page) ;
nand_select_card() ;
return sm_media_read_sector() ;
}
//+-----------------------------------------------------------------------------
// Name:
// nand_write_sector()
//
// Declaration:
// t_result nand_write_sector(uint8 *buf) reentrant
//
// Purpose:
//
// Arguments:
//
// Return:
//
// Notes:
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
t_result nand_write_sector() reentrant
{
trace4(0, nand, 0, "nand_write_sector() zone:%d WR_PHY:%d log:%d page:%d", g_addr_zone, g_addr_wr_phy_blk, g_addr_log_blk, g_addr_page) ;
nand_select_card() ;
return sm_media_write_sector() ;
}
//+-----------------------------------------------------------------------------
// Name:
// nand_copy_sector()
//
// Declaration:
// t_result nand_copy_sector() reentrant
//
// Purpose:
//
// Arguments:
//
// Return:
//
// Notes:
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
t_result nand_copy_sector() reentrant
{
trace4(0, nand, 0, "nand_copy_sector() zone:%d SRC_BLK:%d DEST_BLK:%d page:%d", g_addr_zone, g_addr_rd_phy_blk, g_addr_wr_phy_blk, g_addr_page) ;
nand_select_card() ;
return sm_media_copy_sector() ;
}
//+-----------------------------------------------------------------------------
// Name:
// nand_read_extra_data()
//
// Declaration:
// TBD
//
// Purpose:
// TBD
//
// Arguments:
// TBD
//
// Return:
// TBD
//
// Notes:
// TBD
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
t_result nand_read_extra_data(void) reentrant
{
trace3(0, nand, 0, "nand_read_extra_data() zone:%d phy_blk:%d page:%d", g_addr_zone, g_addr_rd_phy_blk, g_addr_page) ;
nand_select_card( ) ;
return sm_media_read_extra_data() ;
}
//+-----------------------------------------------------------------------------
// Name:
// nand_write_extra_data()
//
// Declaration:
// t_result nand_write_extra_data(void) reentrant
//
// Purpose:
// TBD
//
// Arguments:
// TBD
//
// Return:
// TBD
//
// Notes:
// TBD
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
t_result nand_write_extra_data(void) reentrant
{
nand_select_card( ) ;
return sm_media_write_extra_data() ;
}
//+-----------------------------------------------------------------------------
// Name:
// nand_erase_card()
//
// Declaration:
// t_result nand_erase_card() reentrant
//
// Purpose:
// TBD
//
// Arguments:
// TBD
//
// Return:
// k_success always
//
// Notes:
// TBD
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
t_result nand_erase_card() reentrant
{
trace0(0, nand, 0, "nand_erase_card()") ;
for(g_addr_zone=0;
g_addr_zone<_media_data(num_zones);
g_addr_zone++)
{
// select the card once-per-zone
nand_select_card() ;
for(g_addr_wr_phy_blk = g_addr_zone?0:_media_data(boot_block)+1;
g_addr_wr_phy_blk < _media_data(physical_blocks_per_zone) ;
g_addr_wr_phy_blk++)
{
sm_media_erase_block() ;
}
}
return k_success ;
}
//+-----------------------------------------------------------------------------
// Name:
// nand_set_read_addr()
//
// Declaration:
// t_result nand_set_read_addr() reentrant
//
// Purpose:
// set media-specific address from internal zone/rd_phy_blk/sector addres
//
// Arguments:
// TBD
//
// Return:
// k_success always
//
// Notes:
// TBD
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
t_result nand_set_read_addr() reentrant
{
trace3(0, nand, 0, "nand_set_read_addr() page:%02x%02x%02x", g_nand_rd_addr_msb, g_nand_rd_addr_mid, g_nand_rd_addr_lsb) ;
_sm_hw_set_rd_addr();
_sm_data_wr(0x00);
_sm_data_wr(g_nand_rd_addr_lsb) ;
_sm_data_wr(g_nand_rd_addr_mid) ;
if ( _lun_data(media)&kbm_sm_media_addr_4cyc)
_sm_data_wr(g_nand_rd_addr_msb);
_sm_hw_set_rd_data(g_nand_rw_speed);
return k_success ;
}
//+-----------------------------------------------------------------------------
// Name:
// nand_set_write_addr()
//
// Declaration:
// t_result nand_set_write_addr() reentrant
//
// Purpose:
// set media-specific address from internal zone/wr_phy_blk/sector addres
//
// Arguments:
// TBD
//
// Return:
// k_success always
//
// Notes:
// TBD
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
t_result nand_set_write_addr() reentrant
{
trace3(0, nand, 0, "nand_set_write_addr() page:%02x%02x%02x", g_nand_wr_addr_msb, g_nand_wr_addr_mid, g_nand_wr_addr_lsb) ;
_sm_hw_set_wr_addr();
_sm_data_wr(0x00);
_sm_data_wr(g_nand_wr_addr_lsb) ;
_sm_data_wr(g_nand_wr_addr_mid) ;
if ( _lun_data(media)&kbm_sm_media_addr_4cyc)
_sm_data_wr(g_nand_wr_addr_msb);
_sm_hw_set_wr_data(g_nand_rw_speed);
return k_success ;
}
//+-----------------------------------------------------------------------------
// Name:
// nand_set_erase_addr()
//
// Declaration:
// t_result nand_set_erase_addr() reentrant
//
// Purpose:
// set media-specific address from internal zone/wr_phy_blk
//
// Arguments:
// TBD
//
// Return:
// k_success always
//
// Notes:
// The block to be erased should be in g_addr_wr_phy_blk before this
// function is called
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
t_result nand_set_erase_addr() reentrant
{
trace3(0, nand, 0, "nand_set_erase_addr() page:%02x%02x%02x", g_nand_wr_addr_msb, g_nand_wr_addr_mid, g_nand_wr_addr_lsb) ;
_sm_hw_set_wr_addr();
_sm_data_wr(g_nand_wr_addr_lsb) ;
_sm_data_wr(g_nand_wr_addr_mid) ;
if ( _lun_data(media)&kbm_sm_media_addr_4cyc)
_sm_data_wr(g_nand_wr_addr_msb);
_sm_hw_set_wr_data(g_nand_rw_speed);
return k_success ;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?