工具/软件:Linux
我们在 GMPC0中有一个 AM3352和一个 NAND SLC 8位、我们可以从该位引导。
Sysboot 为0100000000010011、适用于 NAND、NANDI2C、MMC0、UART0。 从 NAND 引导时、当从引导加载程序访问 NAND 时、GPMC AD8至15具有3.4kHz 的数据。 SYSBOOT 8位为低电平、因此选择了8位 NAND 闪存。 系统引导时没有问题、但在引导加载程序运行时、他有这种奇怪的行为。 一旦 Linux 内核加载到 RAM 并开始引导、这些行就会保留正常操作、不再是 GPMC 的一部分。
如果使用 Sysboot 0100000000010111 for MMC0、SPI0、UART0、USB0从 microSD 启动、使用相同的引导加载程序、我们将访问 NAND 闪存、并且仅使用行 GPMC0-7、因此我们假设引导加载程序的引导加载程序配置正确。
NAND 引脚的配置为:
{offset (GPMC_ad0)、(MODE (0)| PULLUP_EN | RXACTIVE)}、 // NAND AD0 *
{offset (GPMC_ad1)、(MODE (0)| PULLUP_EN | RXACTIVE)}、 // NAND AD1 *
{offset (GPMC_ad2)、(MODE (0)| PULLUP_EN | RXACTIVE)}、 // NAND AD2 *
{offset (GPMC_ad3)、(MODE (0)| PULLUP_EN | RXACTIVE)}、 // NAND AD3 *
{offset (GPMC_AD4)、(MODE (0)| PULLUP_EN | RXACTIVE)}、 // NAND AD4 *
{offset (GPMC_ad5)、(MODE (0)| PULLUP_EN | RXACTIVE)}、 // NAND AD5 *
{offset (GPMC_ad6)、(MODE (0)| PULLUP_EN | RXACTIVE)}、 // NAND AD6 *
{offset (GPMC_AD7)、(MODE (0)| PULLUP_EN | RXACTIVE)}、 // NAND AD7 *
{offset (GPMC_wait0)、(MODE (0)| RXACTIVE | PULLUP_EN)}、// NAND 等待*
{offset (GPMC_WPN)、(MODE (7)| PULLUP_EN | RXACTIVE)}、 // NAND_WPN *
{offset (GPMC_csn0)、(mode (0)| PULLUUDEN)}、 // NAND_CS0 *
{offset (GPMC_advn_ale)、(MODE (0)| PULLUUDEN)}、/* NAND_ADV_ALE *
{offset (GPMC_oen_ren)、(mode (0)| PULLUUDEN)}、 // NAND_OE *
{offset (GPMC_Wen)、(mode (0)| PULLUUDEN)}、 /* NAND_WEN *
{offset (GPMC_BE0n_cle)、(MODE (0)| PULLUUDEN)}、 // NAND_BE_CLE *
然后我们检查 GPMC_CONFIG1_0寄存器(地址0x50000060)是否具有正确的值0x800 (DEVICETYPE:NAND、deviceSize:8位)
总之、从 MicroSD 引导的引导加载程序正常工作、但从 NAND 引导显示了这种奇怪的行为(使用 AD8至 AD15)
从这个问题开始、系统运行正常。 为什么微控制器使用 GPMC-AD8转 GPMC-AD15?我们如何避免这种情况?
BR