晚上好。
我正面临着一个我无法解释的奇怪问题,也许你可以帮助我
我编译了您的二级引导加载程序项目与UART和SPI的支持(更改在bootloader.h)
- #undef support_an_b_001 //为辅助引导加载程序启用它
+#define SUPPORT_AN_B_001 //为辅助引导加载程序启用它
- #定义ALLOW_NO_HEADER
+ # undef ALLOW_NO_HEADER
- # define AES_ENCRYPTED_IMAGE_SUPPORTED 1
+#定义AES_ENCRYPTED_IMAGE_SUPPORTED 0 //根据UM-B-012 Page 15
- #undef uart_supported
+ # define UART_SUPPORTED
#定义SPI_FLASH_SUPPORTED
根据您的文档,UART下载完美地与J6上的跳线在UART模式下工作。
在SPI配置中移动跳线,我不能加载在Flash上呈现的代码(smartsnippet确认它在Flash上呈现时,我阅读它)
但奇怪的是,当使用其他寄存器时,flash是正确读取的,例如:
#定义x90 MAN_DEV_ID 0
#定义x4b READ_UNIQUE_ID 0
但当从代码中读取时返回一个充满0xFF的头文件:
SpiFlashRead((unsigned long)&AN001Header, (unsigned long) 0, (unsigned long)AN001_SPI_HEADER_SIZE);
我做错什么了吗?
在附加一个pdf与spi内存的转储和调试会话的快照
麦克指标
注。
在spi_commands.c中添加了新函数
uint16_t spi_flash_type (void) {
返回spi_read_flash_memory_man_and_dev_id ();
}
uint64_t spi_UniqueId (void) {
返回spi_read_flash_unique_id ();
}
嗨fontamiHw,
你是想遵循一个特定的应用程序说明,还是做一些特定的事情?你能描述一下你正在做的步骤吗?还可以尝试使用uart打印SPI flash的内容,为了确保您可以使用其中一个SPI外设示例。
由于MT_dialog
好的。
我做了更多的检查,仍然不知道发生了什么。
我从这个例子开始,你建议(感谢它真的很有用)并发现,在第一个开始时,我对我的第二个引导加载程序面临了同样的问题。
该测试将评估PRO挂载,其唯一编号工作正确,但读取的页面返回满0xff。
继续测试,我写了一些数据,并且能够读取相同的数据(所以flash已经通过它的SPI通道正确地编程了)。
但是如果我用smartsnippet读取闪光灯.....仍然看到我在这个线程开头下载的应用程序,“spi flash程序员”选项卡。
基于这一经验,我略微更改了辅助引导加载程序。
当从UART启动时,我将所有字节复制到SPI Flash中,并启动下载的应用程序
当从SPI启动时,它将启动应用程序从SPI Flash中读取它。
我做了一些测试和复制到flash,使用uart引导,不同的应用程序。雷竞技安卓下载
一直以来,我运行的辅助引导加载程序与Keil调试正确,它们都被执行,UART引导和SPI引导后。
但是SmartSnippet仍然向我展示了SPI中的另一个应用程序。
现在有趣的是:
OTP图像是原始的,当我在没有调试器的情况下打开Pro时,“SmartSippet应用程序”被执行。
即使我删除了J6上的所有跳线,在通电时启动这个应用程序(并且次要引导加载程序不能读取没有跳线的Flash)
因为我想在OTP中刻录我改变的二级引导加载程序,我的问题是.....
从哪里OTP读取“Smartsnippet应用程序”而不是在Flash ?
如果我理解得很好,原始的OTP顺序地从UART SI和I2C读取,那么为什么会出现这种行为呢?
麦克指标
嗨fontamiHw,
关于智能片段和SPI,请确保您已经正确配置了PRO板上的SPI引脚(检查跳线),也要确保在板设置选项卡中为SPI Flash引脚配置选择了适当的引脚。此外,在智能片段尝试使用JTAG接口连接,如果您正在使用UART接口,请检查一次,如果正确的图像返回。关于你的问题,我有点困惑,我不明白你的确切意思,你说当SPI flash加载一个图像,即使你删除SPI跳线图像从SPI加载?如果启用了应用程序标志,则主引导加载程序将从OTP启动,这将禁用主引导加载程序的串行引导,雷竞技安卓下载请检查文件UM-B-012_DA14580_581_583创建二级启动loader_v3.0和AN-B-001 -从串行接口v2.0启动580通过的程序文档。
由于MT_dialog