This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM2432:通过 GPMC 擦除或编程 NAND 芯片失败

Guru**** 2619545 points

Other Parts Discussed in Thread: AM2432

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1453074/am2432-erase-or-program-nand-chip-failed-through-gpmc

器件型号: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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Ronny

    我发现 AM243 SDK 9.2发行说明中提到了一个勘误表:

    您是否有任何 与此相关的32位读取或写入操作?

    此致

    Zekun

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Zekun
     我们使用该 GPMC 模型。 8位 AND 器件

    AM64X 与 AM243X 之间的主要区别

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是用于 AM243选择的 GPMC 连接模式、8位非多路复用。 这是您正在使用的器件吗?

    此致

    Zekun

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Zekun

     我们的硬件使用该模式:8位 NAND 器件、而不是8位非多路复用存储器

    BRS

    Ronny

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Zekun

     我已经尝试了下拉列表中的所有三种选择:Data Address Multiplex (数据地址多路复用)。 如果我选择 AAD-多路复用器件或地址和数据多路复用器件、演示将在 Board_flashOpen ()处失败

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Zekun

     感谢你的帮助。

     该问题现在已经得到解决、因为 WP 引脚通过电阻器连接到 GND。

     我们可以通过移除电阻器来擦除或写入良好。

     BRS

     Ronny

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的通知。 Ronny。

    RGS

    Zekun

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Zekun

     我对 SDK 有一些建议。

     在 MCU_PLUS_sdk_am243x_09_02_01_05 (GPMC_FLASH_IO)中、没有 WP 引脚配置。 如果我们放置一个下拉电阻来保护 NAND 闪存中的数据、擦除或编程将失败、因为 WP 引脚保持低电平。

     您稍后是否会在 SDK 中提供 WP 引脚的配置?

     谢谢。

     BRS

     Ronny

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    让我向 SDK 开发团队提供反馈来解决此问题。 感谢您的建议、Ronny。

    此致

    Zekun