Other Parts Discussed in Thread: AM5728
您好!
实际上、我希望在裸机情况下使用 JTAG 对 QSPI 闪存执行读写操作。 已在 IDK-AM4377中尝试相同的方法。
在那里、我有了 Starterware、并在他们的帮助下在 CCS 中创建了项目。
您提到的流程是否可以实现相同的功能?
请告诉我同样的情况。
Br、Abhinav
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.
Abhinav、
我们在 Processor SDK RTOS 中提供的低级驱动程序可用于裸机以及 RTOS 上下文。 为了实现这一点、我们提供了一个名为(OSAL)的操作系统抽象层、该抽象层具有两个版本、一个版本用于 RTOS、另一个版本可用于无操作系统或裸机代码的上下文。
您可以看到裸机示例中使用的 QSPI 驱动程序、该驱动程序包含在我们为测试电路板功能提供的诊断测试中。 您可以在 PDK 封装的以下位置找到此示例。
pdk_am57xx_1_0_9\packages/ti\board\diag\QSPI
此致、
Rahul
PS: 用于构建 和运行诊断程序的文档。
http://processors.wiki.ti.com/index.php/Processor_SDK_RTOS_DIAG
感谢 Rahul 的答复。
现在、您能不能帮助我构建相同的器件。
我正在访问中提到的链接、但 make 命令不起作用。
所遵循的步骤-
已将 pdksetupenv.bat 和 Rules.make 复制到 pdk_am57xx_1_0_9\packages/ti\board\diag、并执行了链接中提到的相同操作
2.已尝试"全部制作"命令。 出现以下错误
"make"不能识别为内部或外部命令、
可操作的程序或批处理文件。
3.然后发现 dir.
4.移动到 pdk_am57xx_1_0_9\packages/ti\board\diag\QSPI 并尝试执行 make 命令、但仍然出现相同的错误。
器件型号:AM5728
工具/软件:TI-RTOS
您好!
我在 C:\ti\pdk_am57xx_1_0_9\packages/ti\board\diag\qspi\src\qspi_diag.c 中使用 IDK-Am5728板和 QSPI 诊断示例
我的意图是使用实用程序将 MLO 和 u-boot 写入闪存。 将 MLO 和 u-boot 转换为包含大数组的头文件、我将其包含在 QSPI_diag.c 中
当尝试仅写入 MLO 时、它将写入闪存、并在复位时从闪存引导 MLO (已在 TeraTerm 中打印)。
但是、当尝试将 MLO 与 u-boot 一起写入时、只有 MLO 正在引导、而不是 u-boot。 使用以下代码写入 MLO 和 u-boot。
S25FLFlash_BlockErase (flashHandle、blockNumber);
/*以32位字的数量设置传输长度*/
TransferLength = kSize_MLO;/* MLO 的大小*/
/*根据模式更新目标地址。 对于配置模式、通过
包含闪存偏移值的变量的地址。
对于存储器映射模式、直接传递闪存偏移值。 *
addressValue =(QSPI_OPER_MODE_CFG=hwAttrs->operMode )?
(uint32_t)&addrValue:addrValue;
/*更新事务参数*/
flashTransaction.data =(uint8_t *)&MLO[0];
flashTransaction.address =地址值;
flashTransaction.dataSize =传输长度;//以字节为单位*/
/*将缓冲区写入闪存*/
RetVal = SF25FL_bufferWrite (flashHandle、flashTransaction);
UART_printf ("MLO 刷写成功! \n");
transferLength = kSize_u_boot;
address 值= kSize_MLO + 1;
flashTransaction.data =(uint8_t *)&u_boot[0];
flashTransaction.address =地址值;
flashTransaction.dataSize =传输长度;//以字节为单位*/
/*将缓冲区写入闪存*/
RetVal = SF25FL_bufferWrite (flashHandle、flashTransaction);
UART_printf ("U-boot 已成功刷写! \n");
SF25FL_Close (flashHandle);
请检查这里是否有问题?
我将 flashTransaction.address 视为偏移量、因此在 u-boot 写入从 MLO 大小更新它的情况下。
请问这是否有问题?
Br、Abhinav
您好、Rahul、
Okays 只会在这里回复。
我认为我的上一篇文章不清楚我们要实现的目标。
此处提供了相关背景信息、以便有助于进一步讨论。
我的最终目标是使用 CCS 刷写 QSPI。
现在、我在 Linux 平台上安装了 am57xx SDK 和独立的 u-boot 源码。
为 am572x 编译 u-boot 并使用这些二进制文件(MLO 和 u-boot.img)、能够从 SD 卡引导电路板。
AM572x SDK 还与诊断应用一起成功构建。
使用 QSPI_diagExample_idkAM572x_armv7.out 二进制文件生成、作为构建 qpsi_diag.c 的一部分
通过 IDK-AM5728板和控制台上的 CCS 加载此二进制文件、即可获得正确的 QSPI 读写打印。
现在、我所做的是使用 bin2header Linux 开源实用程序将 MLO 转换为十六进制数组。 附加输出文件以供参考(mLO.h).pfA
已在 QSPI_diag.c 文件中包含头文件、并已进行一些修改、以将此 MLO 阵列写入闪存、而不是模式。
按照相同的步骤 、通过 CCS 将修改后的 QSPI_diagExample_idkAM572x_armv7.out 二进制文件加载到 QSPI、并观察 Teraterm 上的打印结果。
QSPI 写入完成后、在电路板上执行热复位、并能够在控制台上看到 MLO 日志、以确认电路板现在正在从 QSPI 引导。
因为只有 MLO 刷写、MLO 打印件即将推出。
第二步是按照相同的过程在 MLO 之后使用 qpsi_diag.c 写入 u-boot
再次创建了 u-boot 的十六进制数组并相应地修改 了 qpsi_diag.c 以在 MLO 之后写入 u-boot。 代码在我的上一个帖子中共享。
通过 CCS 编译和加载此二进制文件、能够在控制台上查看日志、但当我重置电路板时、只有 MLO 正在引导而不是 u-boot。
我怀疑 u-boot 未正确写入到闪存中、我的代码发生了变化。我的修改代码中一定会出现一些问题。
希望这可以解决这个问题。
作为这种方法的可行性之一,我们已经在 IDK-AM4377上确认了它,我们可以使用闪存写入应用程序在 QSPI 上写入 u-boot,并从那里引导。
只需检查上一个帖子的代码是否正确即可。
Br、Abhinav
e2e.ti.com/.../MLO.h