Other Parts Discussed in Thread: AM2432
工具与软件:
SDK: mcu_plus_sdk_am243x_09_02_01_05
CCS: 12.7.0.00007
芯片:am2432ALV
示例: C:\ti\mcu_plus_sdk_am243x_09_02_01_05\examples\drivers\gpmc\gpmc_flash_io
NAND: MT29F4G08ABBFAH4-AATF
我们使用了 GPMC_IO 演示来测试我们的 NAND 芯片。 该相同的 nand 芯片(MT29F4G08ABBFAH4-AATF)在 MCU_PLUS_SDK_am64x_09_00_00_35中使用 GPMC_FLASH_IO 的另一个项目中进行了良好测试
虽然我们在 AM2432上使用 mcu_plus_sdk_am243x_09_02_01_05\examples\drivers\gpmc\gpmc_flash_io 运行时、它会失败。
使用 TDMSMU110-U、Flash_open ()正确执行调试时、我们可以获得 DevID (0000AC80)和 manID (0000002C)。 我根据他们修改了测试代码。
但是,它在 Flash_eraseBlk()上执行失败。
使用 TDMSEMU110-U 进行调试时、它在 Flash_nandGpmcErase->GPMC_writeNandCommand 中执行、确切点如下、状态为 SystemP_Failure
STATUS += GPMC_waitPinInteruptStatusReadyWaitTimeout (句柄、cmdParams->waitTimeout);
状态+= GPMC_waitPinStatusReadyWaitTimeout (句柄、GPMC_WAIT_PIN_STATUS_WAIT_TIME_MIN);
API Flash_open() 也称为 GPMC_writeNandCommand ()并且执行良好、所以我认为硬件是可以的。
am243x_sdk 和 am64x_adk 有一些区别、是否需要更改任何参数?
等待你的答复,谢谢。
演示代码如下:
/*闪存属性*/
Flash_Attrs gFlashAttrs_MT29F8G08ADAFAH4 =
{
.flashName ="MT29F8G08ADAFAH4"、
//.deviceId = 0xD3D0、
deviceId = 0xAC80、//在模型板上与 MT29F4G08ABBFAH4进行测试
.manufacturerId = 0x2C、
//.flashSize = 1073741824、// 1Gb/8Gb
.flashSize =536870912、// 512MB/4Gb
.blockCount = 4096、//两个平面
//.blocksize = 262144、// 256K (双平面)
.blocksize = 131072、// 128K
.PageCount = 64、
//.pagesize = 4096、
.pagesize = 2048、//对于 MT29F4G08ABBFAH4
//.spareAreaSize = 256、
.spareAreaSize = 512、
};
void GPMC_FLASH_IO_MAIN (void * args)
{
int32_t status = SystemP_Success;
uint32_t 偏移;
uint32_t blk、page;
Flash_Attrs *flashAttrs;
uint32_t i;
/*打开 GPMC 驱动程序等*/
drivers_open();
/*打开闪存驱动程序、GPMC 实例作为输入*/
Status = Board_driversOpen ();
DebugP_assert (STATUS==SystemP_SUCCESS);
Status = Board_flashOpen ();
DebugP_assert (STATUS==SystemP_SUCCESS);
flashAttrs = Flash_getAttrs (CONFIG_FLASH0);
/*用已知数据填充缓冲区、
*从偏移中查找块编号,
*擦除块、写入数据、从特定偏移量读回
*并最终比较结果。
*/
OFFSET = APP_GPMC_FLASH_OFFSET_BASE;
GPMC_FLASH_IO_FILL_BUFFERS ();
flash_offsetToBlkPage (gFlashHandle[CONFIG_FLASH0]、offset、&blk、&page);
Status = Flash_eraseBlk (gFlashHandle[CONFIG_FLASH0]、blk);
DebugP_assert (STATUS==SystemP_SUCCESS);
STATUS = Flash_WRITE (gFlashHandle[CONFIG_FLASH0]、OFFSET、gGpmcTxBuf、APP_GPMC_DATA_SIZE);
DebugP_assert (STATUS==SystemP_SUCCESS);
for (i=0;i<128;i++)
{
DebugP_LOG ("%X "、gGpmcTxBuf[i]);
}
DebugP_log ("\r\n");
STATUS = Flash_READ (gFlashHandle[CONFIG_FLASH0]、OFFSET、gGpmcRxBuf、APP_GPMC_DATA_SIZE);
DebugP_assert (STATUS==SystemP_SUCCESS);
for (i=0;i<128;i++)
{
DebugP_LOG ("%X "、gGpmcRxBuf[i]);
}
状态|= GPMC_FLASH_IO_COMPARE_BUFFERS ();
DebugP_assert (STATUS==SystemP_SUCCESS);
offset = APP_GPMC_FLASH_OFFSET_BASE +(flashAttrs->blocksize*2048);
GPMC_FLASH_IO_FILL_BUFFERS ();
flash_offsetToBlkPage (gFlashHandle[CONFIG_FLASH0]、offset、&blk、&page);
Flash_eraseBlk (gFlashHandle[CONFIG_FLASH0]、blk);
FLASH_WRITE (gFlashHandle[CONFIG_FLASH0]、OFFSET、gGpmcTxBuf、APP_GPMC_DATA_SIZE);
Flash_READ (gFlashHandle[CONFIG_FLASH0]、OFFSET、gGpmcRxBuf、APP_GPMC_DATA_SIZE);
状态|= GPMC_FLASH_IO_COMPARE_BUFFERS ();
if (SYSTEMP_SUCCESS ==状态)
{
DebugP_LOG ("所有测试均已通过!\r\n ");
}
设计
{
DebugP_log ("某些测试已失败!!\r\n ");
}
Board_flashClose ();
Board_driversClose ();
drivers_close();
}
BRS
Ronny






