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.

[参考译文] RTOS/AM5716:QSPI 编程问题

Guru**** 2540720 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/663039/rtos-am5716-qspi-programming-issue

器件型号:AM5716

工具/软件:TI-RTOS

你好。

我已经对 PDK108中的"QSPI_BasicExample_idkAM571x_armTestProject"示例项目进行了一些测试。  

在不更改任何代码的情况下测试项目时、一切似乎都正常。 但是、我有两个问题、需要至少解决其中一个问题。

问题1:

我使用代码通过存储器映射模式将文件复制到闪存(类似于 pdk/boot 中的闪存写入器工具程序)。 然而、当在 S25FL.c 的 SF25FL_bufferWrite ()中使用存储器映射模式时、每个事务只传输1字节。 这是有效的、但需要太长的时间。 (对于270 KB 存储空间、大约40秒)。

使用存储器映射模式时、是否可以在一次传输(页编程)中复制256个字节?

问题2:

如果无法解决问题1、我会遇到配置模式写入问题。 在同一示例工程中、当使用配置模式写入时、会一次传输256个字节。 但是、我的问题是从字节编号257开始、写入后只有0xFF 回读。 对于1到256的字节、在这种模式下、一切似乎都正常工作。

除了更改要传输的字节数外、配置模式代码在项目中不会改变。 (最初为200字节)。

感谢您的持续支持。

Anders。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    安德斯

    我将需要研究问题1并返回给您、但我确实认为我们理解问题2正在发生的情况。 QSPIn`t 示例只是一个确认测试、即 QSPI LLD 在功能上正常工作、并显示示例配置、因此当前设置仅用于对第一个扇区进行编程、因为它不提供逻辑来确定需要多少个扇区 编程。 如果您看到所有操作都是在 blockNum0 (扇区0)上执行的,并且 addresssValue 基于该扇区。

    QSPI 闪存写入器代码中提供了用于对大于扇区大小的数据进行编程的 corrrect 逻辑、我们在这些器件的启动工具中支持这些代码。 请参阅文件 SBL_SoC.c 中的函数 SBL_qspiFlashWrite 和 SBL_qspiFlashRead、该文件位于路径 pdk_am57xx_x_x_x\packages/ti\boot\sbl\soc\am57xx 中。
    这些函数检测长度、然后根据传输长度确定需要在 QSPI 闪存上对多少个扇区进行编程、然后一次对闪存一个扇区进行编程、直到将整个二进制文件编程到闪存中。 另请注意、按照闪存数据表进行编程之前、每个扇区都需要被擦除。

    请查看并告知我们这是否符合您的要求。

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

    对于第2期:
    我确信在对要编程的扇区进行编程之前会擦除这些扇区。 当然、我现在已经在 SBL_qspiFlashWrite 和 SBL_qspiFlashRead 中实现了代码。 相同的结果。
    为了确保我们所说的内容相同:一个块为64 KB (有时为4 KB)。 我现在使用最大1KB 数据进行测试。 因此、我始终写入块0。 但是、写入字节编号257时会出现问题。 让我们将每页256个字节称为一个字节。 写入第一页可以正常工作、但写入第二页时、数据回读不正确(仅0xFF)。

    在 C:\ti\pdk_am57xx_1_0_8\packages/ti\drv\spi\test\qspi_flash\src\Flash_S25FL\S25FL.c 中、
    用于页面编程的代码可在以下位置找到:

    if (QSPI_OPER_MODE_CFG = object->qspiMode)

    /*
    *配置模式写入一次支持256字节。 那么、如果长度是
    *大于256、则必须执行多个事务、直至
    *所有字节都被写入。
    *
    while (长度> 256)

    SF25FL_ConfigMode_Write (dstOffstAddr、srcAddr、256、flashHandle);
    dstOffstAddr = dstOffstAddr +(256 / 4);
    srcAddr += 256;
    长度-= 256;

    if (长度> 0)

    SF25FL_ConfigMode_Write (dstOffstAddr、srcAddr、length、flashHandle);



    供参考:我发现当从偏移量0x10000U (从第二个块开始)开始时、我在回读数据时得到1字节错误的偏移。 但是、我可以读回2个页面、这些页面不只有0xFF。

    我已经对此进行了一些测试和调试、似乎正确的数据被发送到 C:\ti\pdk_am57xx_1_0_8\packages/ti\drv\spi\src\v1\qspi_v1.c 中的函数 QSPI_cmd_mode_write_v1 () 数据似乎也被发送到闪存(至少没有发送0xFF)。

    您对进一步调试/测试的内容有什么建议吗?

    也许您可以在系统上使用超过256字节的配置模式测试写入?

    感谢您的帮助、

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

     是否有更新?

    供参考我尝试制作的是一个生产闪存工具、其中包含 SD 卡文件作为输入。 代码在 MMAP 模式下工作、传输长度为1字节。 问题是、在每个事务中对一个字节进行编程需要很长时间。 这里最简单的问题可能是这个问题(问题1)。 mmap 是用于使用引导和应用文件(?)对闪存进行编程的模式。 但是、我发现配置模式写入速度也很快(遗憾的是数据错误)。

    我已经在 mmap 模式上完成了一些调试、事务长度为256字节(以及其他长度、结果相同)。 在 C:\ti\pdk_am57xx_1_0_8\packages/ti\drv\spi\src\v1\qspi_v1.c 中

    静态空 QSPI_mmap_mode_write_v1 (SPI_Handle handle、
    const SPI_Transaction *事务)
    {
    QSPI_HwAttrs const *hwAttrs; /* QSPI 硬件属性*/
    uint32_t mmapWriteCmd = 0U; /* mmap 命令*/
    uint32_t count = 0U; /*事务长度*/
    uint8_t * pSrc; /*源地址*/
    uint8_t *pDst; /*目标地址*/
    QSPI_v1_Object *对象; /* QSPI 对象*/
    uint32_t 偏移;
    
    
    /*输入参数验证*/
    OSAL_assert (!((handle!= NULL)&&(事务!= NULL)));
    
    /*将闪存事务参数复制到局部变量*/
    pSrc =(uint8_t*)事务->rxBuf;
    pDst =(uint8_t*)事务->txBuf;
    count =事务-> count;
    
    /*获取对象和 hwAttrs 的指针*/
    hwAttrs =(QSPI_HwAttrs*) handle->hwAttrs;
    对象=(QSPI_v1_Object*) handle ->对象;
    
    /*计算闪存目标地址*/
    uint32_t temp_addr =((uint32_t) hwAttrs->memMappedBaseAddr +(uint32_t)事务->txBuf);
    pDst =((uint8_t *)(temp_addr));
    
    // Anders 调试
    uint8_t * pDstOrig = pDst;
    uint8_t * pSrcOrig = pSrc;
    // Anders 调试结束
    
    offset =(uint32_t)事务->txBuf;
    
    /*提取存储器映射模式命令*/
    mmapWriteCmd =(uint32_t) object->transferCmd;
    
    QSPISetMemMapWriteCmd (hwAttrs->baseAddr、hwAttrs->chipSelect、mmapWriteCmd);
    QSPISetMemMapNumAddrByteshwAttrs->baseAddr、hwAttrs->chipSelect、
    QSPI_MEM_MAP_NUM_ADDR_Bytes_three);
    QSPISetMemAddrSpace (hwAttrs->baseAddr、hwAttrs->chipSelect、
    QSPI_MEM_MAP_PORT_SEL_MEM_MAP_PORT);
    
    QSPIMmapCSEnable/hwAttrs->baseAddr、hwAttrs->chipSelect);
    
    /* 4字节寻址模式。 *
    if (偏移>(uint32_t) 0xFFFFFF")
    {
    /*切换到四字节寻址模式*/
    QSPISetMemMapNumAddrByteshwAttrs->baseAddr、hwAttrs->chipSelect、
    QSPI_MEM_MAP_NUM_ADDR_Bytes_Four);
    }
    
    while (count)
    {
    *pDst =*pSrc;
    pDst++;
    pSrc++;
    count--;
    }
    
    // Anders 调试检查 pDst 后256字节的数据。 PDst 是闪存上的地址。 只写入第一个字节、其他字节读作0xFF。
    int i; 
    uint8_t dataDst[256]; 对于(i=0;i<256;i++) { dataDst[i]=pDstOrig[i]; } uint8_t 数据表[256]; 对于(i=0;i<256;i++) { Datasrc[i]=pSrcOrig[i]; } // Anders 调试结束 /* 4字节寻址模式。 * if (偏移>(uint32_t) 0xFFFFFF") { /*切换回三字节寻址模式。 * QSPISetMemMapNumAddrByteshwAttrs->baseAddr、hwAttrs->chipSelect、 QSPI_MEM_MAP_NUM_ADDR_Bytes_Four); } }

    下面是数组 Datsrc (本地存储器中的缓冲区)和 dataDst (闪存上的缓冲区)中的数据。 您可以看到、QSPI_v1.c 中的函数 QSPI_mMAP_MODE_WRITE_v1中仅复制第一个字节

    字节编号 数据表 数据 Dst
    0 1 1
    1 0 255.
    2. 0 255.
    3. 0 255.
    4. 2. 255.
    5. 0 255.
    6. 0 255.
    7. 0 255.
    8. 3. 255.
    9. 0 255.
    10. 0 255.
    11. 0 255.
    12. 4. 255.
    13. 0 255.
    14. 0 255.
    15. 0 255.
    16. 5. 255.
    17. 0 255.
    18 0 255.
    19. 0 255.
    20. 6. 255.
    21. 0 255.
    22. 0 255.
    23 0 255.
    24 7. 255.
    25 0 255.
    26 0 255.
    27. 0 255.
    28. 8. 255.
    29. 0 255.
    30 0 255.
    31. 0 255.
    32 9. 255.
    33. 0 255.
    34 0 255.
    35. 0 255.
    36. 10. 255.
    37. 0 255.
    38. 0 255.
    39. 0 255.
    40 11. 255.
    41. 0 255.
    42. 0 255.
    43. 0 255.
    44. 12. 255.
    45. 0 255.
    46. 0 255.
    47. 0 255.
    48 13. 255.
    49 0 255.
    50 0 255.
    51. 0 255.
    52. 14. 255.
    53. 0 255.
    54 0 255.
    55 0 255.
    56. 15. 255.
    57. 0 255.
    58. 0 255.
    59. 0 255.
    60 16. 255.
    61. 0 255.
    62. 0 255.
    63. 0 255.
    64 17. 255.
    65 0 255.
    66 0 255.
    67 0 255.
    68 18 255.
    69 0 255.
    70 0 255.
    71. 0 255.
    72. 19. 255.
    73. 0 255.
    74. 0 255.
    75 0 255.
    76. 20. 255.
    77 0 255.
    78 0 255.
    79 0 255.
    80 21. 255.
    81. 0 255.
    82. 0 255.
    83. 0 255.
    84 22. 255.
    85. 0 255.
    86 0 255.
    87 0 255.
    88 23 255.
    89 0 255.
    90 0 255.
    91. 0 255.
    92 24 255.
    93 0 255.
    94 0 255.
    95 0 255.
    96 25 255.
    97 0 255.
    98 0 255.
    99 0 255.

    我相信在将交易数从1更改为另一个数字时,我忘记了包含一个小细节。 我尝试包括在内
    SPI_CONTROL (handle、SPI_V1_CMD_SETFRAMELENGTH、((void *)&frmLength));在 SPI_transfer 之前、 但这不会产生任何影响。

    感谢您的支持、

    Anders。

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

    我没有机会对此进行测试、但可以告诉您、QSPI 闪存和引导是通过系统测试使用大于256字节的映像进行测试的、 因此、您发现在配置模式下使用 SBL 闪存写入器实用程序时、字节257始终读取为0xFF、这让我感到惊讶。

    作为回读验证步骤的一部分、闪存写入器实用程序从闪存读回数据、并验证闪存中的二进制数据是否与 SD 卡中的输入二进制数据匹配。 如果您可以提供您的源项目或说明来帮助我们重现此问题、那么我可以更轻松地帮助您调试此问题。

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

    Rahul、

    感谢您的回答。

    测试的最简单方法是使用 pdk108中提供的项目"QSPI_BasicExample_idkAM571x_armTestProject"。 我认为这个项目和闪存写入器代码之间没有实际差异。 我已附加修改后的主文件。 该文件擦除前10个块(来自偏移0)、并从偏移0开始写入。 该文件还具有一个很好的 UART_printf 日志、以便您可以轻松地查看写回的内容。 使用此文件时,如果使用的传输长度为50*2字节,则所有测试均正确。 但是当使用65*4字节(超过256字节)时,第一个测试失败。 (配置模式、单次写入).e2e.ti.com/.../main_5F00_qspi_5F00_flash_5F00_test.c

    测试配置模式单一时的 UART_printf 日志:

    在下面单个打印 cfg。
    ---- 新的网页----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    txbuf[0]:50462976 0x03020100 00000011000000100000000100000000
    rxbuf[0]:50462976 0x03020100 00000011000000100000000100000000确定。 扇区:0。 页数:0。 POS:0。
    
    txbuf[1]:117835012 0x07060504 00000111000001100000010100000100
    rxbuf[1]:117835012 0x07060504 00000111000001100000010100000100正常。 扇区:0。 页数:0。 位置:1.
    
    txbuf[2]:185207048 0x0b0a0908 00001011000010100000100100001000
    rxbuf[2]:185207048 0x0b0a0908 00001011000010100000100100001000正常。 扇区:0。 页数:0。 位置:2.
    
    txbuf[3]:2579084 0x0f0e0d0c 0000111000011100000110100001100
    rxbuf[3]:2579084 0x0f0e0d0c 0000111000011100000110100001100正常。 扇区:0。 页数:0。 位置:3.
    
    txbuf[4]:319951120 0x13121110 0001001100010000100010000
    rxbuf[4]:319951120 0x13121110 000100110001000010001000100010000确定。 扇区:0。 页数:0。 位置:4.
    
    txbuf[5]:387323156 0x17161514 000101110001011000010100010100
    rxbuf[5]:387323156 0x17161514 00010111000101100001010001010100OK。 扇区:0。 页数:0。 位置:5.
    
    txbuf[6]:454695192 0x1b1a1918 000110110110100001100100011000
    rxbuf[6]:454695192 0x1b1a1918 00011011000100001100100011000确定。 扇区:0。 页数:0。 位置:6。
    
    txbuf[7]:522067228 0x1f1e1d1c 000111000111100001110100011100
    rxbuf[7]:522067228 0x1f1e1d1c 000111000111100001110100011100正常。 扇区:0。 页数:0。 位置:7。
    
    txbuf[8]:589439264 0x23222120 0010001100100010000100000
    rxbuf[8]:589439264 0x232120 00100011001000100001000000确定。 扇区:0。 页数:0。 位置:8.
    
    txbuf[9]:656811300 0x27262524 00100111001100010010100100
    rxbuf[9]:656811300 0x27262524 00100111001100010010100100正常。 扇区:0。 页数:0。 位置:9。
    
    txbuf[10]:724183336 0x2b2a2928 001010110010100010100101000
    rxbuf[10]:724183336 0x2b2a2928 001010110010100010100100101000正常。 扇区:0。 页数:0。 位置:10。
    
    txbuf[11]:791555372 0x2f2e2d2c 00101111001011100010110100101100
    rxbuf[11]:791555372 0x2f2e2d2c 00101111001011100010110100101100正常。 扇区:0。 页数:0。 位置:11.
    
    txbuf[12]:858927408 0x33323130 001100110011001100100011000100110000
    rxbuf[12]:858927408 0x33323130 00110011001100100011000100110000正常。 扇区:0。 页数:0。 位置:12.
    
    txbuf[13]:926299444 0x37363534 00110111001101100011010100110100
    rxbuf[13]:926299444 0x37363534 00110111001101100011010100110100正常。 扇区:0。 页数:0。 位置:13.
    
    txbuf[14]:993671480 0x3b3a3938 00111011001110100011100111000
    rxbuf[14]:993671480 0x3b3a3938 00111011001110100011100111000正常。 扇区:0。 页数:0。 位置:14.
    
    txbuf[15]:1061043516 0x3f3e3d3c 001111110011100011110100111100
    rxbuf[15]:1061043516 0x3f3e3d3c 001111110011100011110100111100正常。 扇区:0。 页数:0。 位置:15.
    
    txbuf[16]:1128415552 0x43424140 01000011010000100000101000000
    rxbuf[16]:1128415552 0x43424140 01000011010000100000101000000确定。 扇区:0。 页数:0。 位置:16。
    
    txbuf[17]:1195787588 0x47464544 010001110100011001000101000100
    rxbuf[17]:1195787588 0x47464544 010001110100011001000101000100确定。 扇区:0。 页数:0。 位置:17.
    
    txbuf[18]:1263159624 0x4b4a4948 01001011010010100100100101001000
    rxbuf[18]:1263159624 0x4b4a4948 010010110100100100100100101001000正常。 扇区:0。 页数:0。 位置:18。
    
    txbuf[19]:1330531660 0x4f4e4d4c 01001111010011100100110101001100
    rxbuf[19]:1330531660 0x4f4e4d4c 01001111010011100100110101001100正常。 扇区:0。 页数:0。 位置:19。
    
    txbuf[20]:1397903696 0x53525150 010100110101001010001010000
    rxbuf[20]:1397903696 0x53525150 01010011010100101000101010000正常。 扇区:0。 页数:0。 位置:20。
    
    txbuf[21]:1465275732 0x57565554 010101110101100101010101010101010100
    rxbuf[21]:1465275732 0x57565554 010101110101011001010101010101010101010101010101010100正常。 扇区:0。 页数:0。 位置:21.
    
    txbuf[22]:1532647768 0x5b5a5958 01011010110101001011001011000
    rxbuf[22]:1532647768 0x5b5a5958 0101101011010100101100101011000正常。 扇区:0。 页数:0。 位置:22。
    
    txbuf[23]:1600019804 0x5f5e5d5c 01011101111001011101011100
    rxbuf[23]:1600019804 0x5f5e5d5c 01011101011110010111011101010101011100确定。 扇区:0。 页数:0。 位置:23。
    
    txbuf[24]:1667391840 0x63626160 01100011011000100110000101100000
    rxbuf[24]:1667391840 0x63626160 01100011011000100110000101100000正常。 扇区:0。 页数:0。 位置:24。
    
    txbuf[25]:1734763876 0x67666564 011001110110011001100101100100
    rxbuf[25]:1734763876 0x67666564 01100111011001100101100101100100确定。 扇区:0。 页数:0。 位置:25。
    
    txbuf[26]:1802135912 0x6b6a6968 0110101101011010100110101101000
    rxbuf[26]:1802135912 0x6b6a6968 0110101101010011010110100101101000正常。 扇区:0。 页数:0。 位置:26。
    
    txbuf[27]:1869507948 0x6f6e6d6c 01101111011100110101101100
    rxbuf[27]:1869507948 0x6f6e6d6c 0110111101110011010110101101100正常。 扇区:0。 页数:0。 位置:27。
    
    txbuf[28]:1936879984 0x73727170 01110011011100111000101110000
    rxbuf[28]:1936879984 0x73727170 01110011011100111000101110000正常。 扇区:0。 页数:0。 位置:28。
    
    txbuf[29]:2004252020 0x77767574 01110111011101100111010100
    rxbuf[29]:2004252020 0x77767574 0111011101110111011001110101110101110100正常。 扇区:0。 页数:0。 位置:29。
    
    txbuf[30]:2071624056 0x7b7a7978 01111011110111001111001011000
    rxbuf[30]:2071624056 0x7b7a7978 01111011110111001111001011000确定。 扇区:0。 页数:0。 位置:30。
    
    txbuf[31]:2138996092 0x7f7e7d7c 011111011110011101011100
    rxbuf[31]:2138996092 0x7f7e7d7c 01111101111001111111110101111100确定。 扇区:0。 页数:0。 位置:31。
    
    txbuf[32]:2206368128 0x83828180 10000011100000101000000110000000
    rxbuf[32]:2206368128 0x83828180 10000011100000101000000110000000正常。 扇区:0。 页数:0。 位置:32。
    
    txbuf[33]:2273740164 0x87868584 10000111100001101000010110000100
    rxbuf[33]:2273740164 0x87868584 10000111100001101000010110000100确定。 扇区:0。 页数:0。 位置:33。
    
    txbuf[34]:2341112200 0x8b8a8988 10001011100010100010011000rxbuf[34]
    :2341112200 0x8b8a8988 100010111000101000100110001000正常。 扇区:0。 页数:0。 位置:34。
    
    txbuf[35]:2408484236 0x8f8e8d8c 10001111100011101000110001100
    rxbuf[35]:2408484236 0x8f8e8d8c 10001111100011101000110110001100正常。 扇区:0。 页数:0。 位置:35。
    
    txbuf[36]:2475856272 0x93929190 10011100101001000110010000
    rxbuf[36]:2475856272 0x93929190 10011100101001000110010000确定。 扇区:0。 页数:0。 位置:36。
    
    txbuf[37]:2543228308 0x97969594 100101111001011010010110010100rxbuf[37]
    :2543228308 0x97969594 10010111100101001011001010010110010100正常。 扇区:0。 页数:0。 位置:37。
    
    txbuf[38]:2610600344 0x9b9a9998 1001101110010100110011000
    rxbuf[38]:2610600344 0x9b9a9998 10011011100101001100110011000确定。 扇区:0。 页数:0。 位置:38。
    
    txbuf[39]:2677972380 0x9f9e9d9c 10011111100111001110110011100
    rxbuf[39]:2677972380 0x9f9e9d9c 10011110011110111001110110011100确定。 扇区:0。 页数:0。 位置:39。
    
    txbuf[40]:2745344416 0xa3a2a1a0 101000111010000110100000
    rxbuf[40]:2745344416 0xa3a2a1a0 101000111010000110100000确定。 扇区:0。 页数:0。 位置:40。
    
    txbuf[41]:2812716452 0xa7a6a5a4 10100111101010010110100100
    rxbuf[41]:2812716452 0xa7a6a5a4 1010011110101001010010110100100100100100100100100100100100100100100100100100100100正常。 扇区:0。 页数:0。 位置:41。
    
    txbuf[42]:2880088488 0xabaaa9a8 1010111010101010100110101000
    rxbuf[42]:2880088488 0xabaaa9a8 101011101010101010101010100110101000正常。 扇区:0。 页数:0。 位置:42。
    
    txbuf[43]:2947460524 0xafaeadac 10101110111010110101100
    rxbuf[43]:2947460524 0xafaeadac 10101110111010101101101011010110101100正常。 扇区:0。 页数:0。 位置:43。
    
    txbuf[44]:3014832560 b3b2b1b0 101100111011001011000110110000
    rxbuf[44]:30148325b60 b3b2b1b0 10110011101100101011000110110000正常。 扇区:0。 页数:0。 位置:44。
    
    txbuf[45]:3082204596 b7b6b5b4 10110111101011010110110110100rxbuf[45]
    :3082204596 b7b6b5b4 1011011110110101101011010110110110110100100正常。 扇区:0。 页数:0。 位置:45。
    
    txbuf[46]:3149576632 0xbbbab9b8 10111011101011100110111000
    rxbuf[46]:3149576632 0xbbbab9b8 101110111010101110011110111000正常。 扇区:0。 页数:0。 位置:46。
    
    txbuf[47]:3216948668 bfbdbc 101111101110111011110111100
    rxbuf[47]:3216948668 bfbdbc 101111101110101110111101111011110111100正常。 扇区:0。 页数:0。 位置:47。
    
    txbuf[48]:3284320704 0xc3c2c1c0 11000011110000101100000111000000
    rxbuf[48]:3284320704 0xc3c2c1c0 11000011110000101100000111000000确定。 扇区:0。 页数:0。 位置:48。
    
    txbuf[49]:3351692740 0xc7c6c5c4 110001110001101100010111000100
    rxbuf[49]:3351692740 0xc7c6c5c4 110001110001101100010111000100确定。 扇区:0。 页数:0。 位置:49。
    
    txbuf[50]:3419064776 0xcbcac9c8 11001011110010110010011100100111001000
    rxbuf[50]:3419064776 0xcbcac9c8 110010111100101100100111001000正常。 扇区:0。 页数:0。 位置:50。
    
    txbuf[51]:3486436812 0xcfcecdcc 11001111110011101100110111001100
    rxbuf[51]:3486436812 0xcfcecdcc 11001111110011101100110111001100正常。 扇区:0。 页数:0。 位置:51。
    
    txbuf[52]:3553808848 0xd3d2d1d0 11010011110101000111010000
    rxbuf[52]:3553808848 0xd3d2d1d0 11010011110101101000111010000确定。 扇区:0。 页数:0。 位置:52。
    
    txbuf[53]:3621180884 0xd7d6d5d4 110101110110101110101010101010100
    rxbuf[53]:3621180884 0xd7d6d5d4 11010111011010110101110101010101010101010101010100正常。 扇区:0。 页数:0。 位置:53。
    
    txbuf[54]:368552920 0xdbdad9d8 11011110101101100111011000
    rxbuf[54]:368552920 0xdbdad9d8 11011011110101101100111011000正常。 扇区:0。 页数:0。 位置:54。
    
    txbuf[55]:3755924956 0xdfeddedddc 1101111101111011101110111011100
    rxbuf[55]:3755924956 0xdfddedddc 11011111011110111011101110111011100确定。 扇区:0。 页数:0。 位置:55。
    
    txbuf[56]:3823296992 0xe3e2e1e0 11100011101110000111100000
    rxbuf[56]:3823296992 0xe3e2e1e0 11100011101110000111100000确定。 扇区:0。 页数:0。 位置:56。
    
    txbuf[57]:3890669028 0xe7e6e5e4 111001111001101110010111100100
    rxbuf[57]:3890669028 0xe7e6e5e4 111001111001101110010111100100确定。 扇区:0。 页数:0。 位置:57。
    
    txbuf[58]:3958041064 0xeae9e8 1110111010101110100111101000
    rxbuf[58]:3958041064 0xeae9e8 1110111010111010111010100111101000确定。 扇区:0。 页数:0。 位置:58。
    
    txbuf[59]:4025413100 0xefeeedec 111011111011101110110111101100
    rxbuf[59]:4025413100 0xefeeedec 11101111101110111011101110111011011110111101100正常。 扇区:0。 页数:0。 位置:59。
    
    txbuf[60]:4092785136 0xf3f2f1f0 11110011110010111000111110000
    rxbuf[60]:4092785136 0xf3f2f1f0 111100111100101111000111110000确定。 扇区:0。 页数:0。 位置:60。
    
    txbuf[61]:4160157172 0xf7f6f5f4 11110111011110111011101110100
    rxbuf[61]:4160157172 0xf7f6f5f4 111101111101101111011101110111011101010101010100正常。 扇区:0。 页数:0。 位置:61.
    
    txbuf[62]:4227529208 0xfbfaf9f8 1111101111101110111001111000
    rxbuf[62]:4227529208 0xfbfaf9f8 1111101111101110111011111001111000确定。 扇区:0。 页数:0。 位置:62。
    
    txbuf[63]:4294901244 0xfffefdfc 11111111111111111011111111011111111100
    rxbuf[63]:4294901244 0xfffefdfc 111111111111111111111110111111110111111111111100确定。 扇区:0。 页数:0。 位置:63。
    
    ---- 新的网页----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    txbuf[64]:50462976 0x03020100 00000011000000100000000100000000
    rxbuf[64]:4294967295 0xffffffff 111111111111111111111111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. POS:0。
    
    txbuf[65]:117835012 0x07060504 00000111000001100000010100000100
    rxbuf[65]:4294967295 0xffffffff 111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:1.
    
    txbuf[66]:185207048 0x0b0a0908 00001011000010100000100100001000
    rxbuf[66]:4294967295 0xffffffff 1111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:2.
    
    txbuf[67]:2579084 0x0f0e0d0c 00001111000011100000110100001100
    rxbuf[67]:4294967295 0xffff 1111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:3.
    
    txbuf[68]:319951120 0x13121110 0001001100010000100010000
    rxbuf[68]:4294967295 0xffffffff 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:4.
    
    txbuf[69]:387323156 0x17161514 000101110001011000010100010100
    rxbuf[69]:4294967295 0xffff 1111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:5.
    
    txbuf[70]:454695192 0x1b1a1918 000110110110100001100100011000
    rxbuf[70]:4294967295 0xFFFF 111111111111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:6。
    
    txbuf[71]:522067228 0x1f1e1d1c 00011111000111100001110100011100
    rxbuf[71]:4294967295 0xffff 111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:7。
    
    txbuf[72]:589439264 0x23222120 0010001100100010000100000
    rxbuf[72]:4294967295 0xFFFF 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:8.
    
    txbuf[73]:656811300 0x27262524 00100111001001100010010100100
    rxbuf[73]:4294967295 0xffffffff 1111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:9。
    
    txbuf[74]:724183336 0x2b2a2928 0010110010100010100101000
    rxbuf[74]:4294967295 0xffff 111111111111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:10。
    
    txbuf[75]:791555372 0x2f2e2d2c 00101111001011100010110100101100
    rxbuf[75]:4294967295 0xffff 111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:11.
    
    txbuf[76]:858927408 0x33323130 001100110011001100100011000100110000
    rxbuf[76]:4294967295 0xFFFF 111111111111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:12.
    
    txbuf[77]:926299444 0x37363534 00110111001101100011010100110100
    rxbuf[77]:4294967295 0xffffffff 1111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:13.
    
    txbuf[78]:993671480 0x3b3a3938 00111011001110100011100111000
    rxbuf[78]:4294967295 0xffff 111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:14.
    
    txbuf[79]:1061043516 0x3f33d3c 001111110011100011110100111100
    rxbuf[79]:4294967295 0xffff 11111111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:15.
    
    txbuf[80]:1128415552 0x43424140 01000011010000100000101000000
    rxbuf[80]:4294967295 0xffffffff 111111111111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:16。
    
    txbuf[81]:1195787588 0x47464544 010001110100011001000101000100
    rxbuf[81]:4294967295 0xffff 111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:17.
    
    txbuf[82]:1263159624 0x4b4a4948 01001011010010100100100101001001001001001000
    rxbuf[82]:4294967295 0xffffffff 1111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:18。
    
    txbuf[83]:1330531660 0x4f4e4d4c 01001111010011100100110101001100
    rxbuf[83]:4294967295 0xffff 111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:19。
    
    txbuf[84]:1397903696 0x53525150 010100110101001010001010000
    rxbuf[84]:4294967295 0xffffffff 11111111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:20。
    
    txbuf[85]:1465275732 0x57565554 010101110101100101010101010101010100
    rxbuf[85]:4294967295 0xffffffff 11111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:21.
    
    txbuf[86]:1532647768 0x5b5a5958 01011010110101001011001011000
    rxbuf[86]:4294967295 0xffffffff 11111111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:22。
    
    txbuf[87]:1600019804 0x5f5e5d5c 0101111101111001011101011100
    rxbuf[87]:4294967295 0xffffffff 1111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:23。
    
    txbuf[88]:1667391840 0x63626160 01100011011000100110000101100000
    rxbuf[88]:4294967295 0xffffffff 1111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:24。
    
    txbuf[89]:1734763876 0x67666564 011001110110011001100101100100
    rxbuf[89]:4294967295 0xffffffff 1111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:25。
    
    txbuf[90]:1802135912 0x6b6a6968 01101011011010100110101101000
    rxbuf[90]:4294967295 0xffff 1111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:26。
    
    txbuf[91]:1869507948 0x6f6e6d6c 01101111011100110101101100
    rxbuf[91]:4294967295 0xffff 111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:27。
    
    txbuf[92]:1936879984 0x73727170 01110011011100111000101110000
    rxbuf[92]:4294967295 0xffffffff 1111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:28。
    
    txbuf[93]:2004252020 0x77767574 01110111011101100111010100
    rxbuf[93]:4294967295 0xffffffff 1111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:29。
    
    txbuf[94]:2071624056 0x7b7a7978 01111011110111001111001011000
    rxbuf[94]:4294967295 0xffff 1111111111111111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:30。
    
    txbuf[95]:2138996092 0x7f7e7d7c 011111011110011101011100
    rxbuf[95]:4294967295 0xffffffff 1111111111111111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:31。
    
    txbuf[96]:2206368128 0x83828180 10000011100000101000000110000000
    rxbuf[96]:4294967295 0xffff 111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:32。
    
    txbuf[97]:2273740164 0x87868584 10000111100001101000010110000100
    rxbuf[97]:4294967295 0xffffffff 1111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:33。
    
    txbuf[98]:2341112200 0x8b8a8988 10001011100010100010011000rxbuf[98]
    :4294967295 0xffff 11111111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:34。
    
    txbuf[99]:2408484236 0x8f8e8d8c 10001111100011101000110001100
    rxbuf[99]:4294967295 0xffff 111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:35。
    
    txbuf[100]:2475856272 0x93929190 10011100101001000110010000
    rxbuf[100]:4294967295 0xffff 1111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:36。
    
    txbuf[101]:2543228308 0x97969594 100101111001011010010110010100rxbuf[101]
    :4294967295 0xffffffff 11111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:37。
    
    txbuf[102]:2610600344 0x9b9a9998 1001101110010100110011000
    rxbuf[102]:4294967295 0xffff 11111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:38。
    
    txbuf[103]:2677972380 0x9f9e9d9c 10011111100111101110110011100
    rxbuf[103]:4294967295 0xffff 1111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:39。
    
    txbuf[104]:2745344416 0xa3a2a1a0 1010001010000110100000
    rxbuf[104]:4294967295 0xffff 111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:40。
    
    txbuf[105]:2812716452 0xa7a6a5a4 10100111101010010110100100
    rxbuf[105]:4294967295 0xffff 111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:41。
    
    txbuf[106]:2880088488 0xabaaa9a8 1010111010101010100110101000
    rxbuf[106]:4294967295 0xffff 11111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:42。
    
    txbuf[107]:2947460524 0xafaeadac 1010111110111010110101100
    rxbuf[107]:4294967295 0xffff 1111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:43。
    
    txbuf[108]:3014832560 b3b2b1b0 10110011101100101011000110110000
    rxbuf[108]:4294967295 0xffffffff 11111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:44。
    
    txbuf[109]:3082204596 b7b6b5b4 10110111101011010110110110100
    rxbuf[109]:4294967295 0xffffffff 1111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:45。
    
    txbuf[110]:3149576632 0xbbab9b8 10111011101011100110111000
    rxbuf[110]:4294967295 0xffff 111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:46。
    
    txbuf[111]:3216948668 bofbebdbc 10111110111010110111100
    rxbuf[111]:4294967295 0xffff 11111111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:47。
    
    txbuf[112]:3284320704 0xc3c2c1c0 11000011110000101100000111000000
    rxbuf[112]:4294967295 0xffffffff 1111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:48。
    
    txbuf[113]:3351692740 0xc7c6c5c4 110001110001101100010111000100
    rxbuf[113]:4294967295 0xffffffff 11111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:49。
    
    txbuf[114]:3419064776 0xcbac9c8 110010111100101100100111001000
    rxbuf[114]:4294967295 0xffff 111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:50。
    
    txbuf[115]:3486436812 0xcfcecdcc 11001111110011101100111001100
    rxbuf[115]:4294967295 0xffff 111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:51。
    
    txbuf[116]:3553808848 0xd3d2d1d0 11010011110101000111010000
    rxbuf[116]:4294967295 0xffff 111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:52。
    
    txbuf[117]:3621180884 0xd7d6d5d4 1101011101101011101010101010100
    rxbuf[117]:4294967295 0xffffffff 111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:53。
    
    txbuf[118]:368552920 0xdbdad9d8 11011110101101100111011000
    rxbuf[118]:4294967295 0xffff 1111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:54。
    
    txbuf[119]:3755924956 0xdfeddedddc 1101111101111011101110111011100
    rxbuf[119]:4294967295 0xffff 11111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:55。
    
    txbuf[120]:3823296992 0xe3e2e1e0 11100011101110000111100000
    rxbuf[120]:4294967295 0xffff 1111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:56。
    
    txbuf[121]:3890669028 0xe7e6e5e4 111001111001101110010111100100
    rxbuf[121]:4294967295 0xffff 11111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:57。
    
    txbuf[122]:3958041064 0xeae9e8 111010111010101110100111101000
    rxbuf[122]:4294967295 0xffff 111111111111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:58。
    
    txbuf[123]:4025413100 0xefeeedec 1110111011101110110111101100
    rxbuf[123]:4294967295 0xffff 11111111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:59。
    
    txbuf[124]:4092785136 0xf3f2f1f0 11110011110010111000111110000
    rxbuf[124]:4294967295 0xffff 11111111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:60。
    
    txbuf[125]:4160157172 0xf7f6f5f4 11110111110110111011101110100
    rxbuf[125]:4294967295 0xffffffff 11111111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:61.
    
    txbuf[126]:4227529208 0xfbfaf9f8 1111101111101110111001111000
    rxbuf[126]:4294967295 0xffff 111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:62。
    
    txbuf[127]:4294901244 0xfffefdfc 11111111111111111011111111011111111100
    rxbuf[127]:4294967295 0xFFFF 11111111111111111111111111111111111111111111111111111111111111111111不相等。 扇区:0。 第页:1. 位置:63。
    
    成功次数:64。
    错误数:64。
    印刷数量:128。
    传输长度:128 * 4字节= 512。
    
    一些测试失败。
    
    

    希望您了解日志:前两行显示发送的前4个字节(txbuf)和接收的数据(rxbuf)。 TxBuf[0]发送 50462976 (十进制)= 0x03020100 (十六进制)=  00000011000000100000000100000000。

    您可以看到、从 uint32_t 数字65 (字节257)、我只为每个字节接收0xFF。

    如果您需要、我还可以提供生产闪存代码、但我希望您首先测试此测试项目、并验证您的系统可以处理超过256个字节。 我认为这是进一步调试的良好起点。

    感谢您的持续支持、

    Anders。

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

    您好、Rahul、

    在上面的项目和代码中、您可以使用长度大于256字节的配置模式测试问题。 此代码将通过存储器映射测试。 但在存储器映射模式下、SF25FL_bufferWrite 一次只写入一个字节、这对于生产闪存工具来说太慢了。 要测试一次写入256字节的 mmap 模式、请使用相同的项目、但要将函数 SF25FL_BufferWrite (位于文件 C:\ti\pdk_am57xx_1_0_8\packages/ti\drv\spi\test\qspi_flash\src\Flash_S25FL\S25FL.c)中的代码更改为以下内容:

    /*
    === SF25FL_bufferWrite ====
    //
    bool SF25FL_bufferWrite (S25FL_Handle flashHandle、
    S25FL_Transaction* flashTransaction)
    {
    bool RetVal = false; /*返回值*/
    SPI_Handle handle = flashHandle->spiHandle;/* SPI handle */
    SPI_Transaction 事务; /* SPI 事务结构*/
    unsigned int idx; /*索引*/
    uint32_t dstOffstAddr; /*闪存偏移地址*/
    unsigned char *srcAddr; /*数据缓冲区的地址*/
    uint32_t length; /*数据长度(以字节为单位)*/
    uint32_t 字节地址;
    uint32_t 页面大小;
    uint32_t Chunklen;
    uint32_t 实际;
    unsigned int frmLength;
    unsigned int addrLengthInBytes;
    unsigned int transferType;
    unsigned char transferCmd;
    QSPI_v1_Object *对象;
    
    /*获取对象和 hwAttrs 的指针*/
    对象=句柄->对象;
    
    /*将闪存事务参数复制到局部变量*/
    dstOffstAddr = flashTransaction -> address;
    srcAddr = flashTransaction -> data;
    length = flashTransaction->dataSize;
    
    if (QSPI_OPER_MODE_CFG = object->qspiMode)
    {
    /*
    *配置模式写入一次支持256字节。 那么、如果长度是
    *大于256、则必须执行多个事务、直至
    *所有字节都被写入。
    *
    while (长度> 256)
    {
    SF25FL_ConfigMode_Write (dstOffstAddr、srcAddr、256、flashHandle);
    dstOffstAddr = dstOffstAddr +(256 / 4);
    srcAddr += 256;
    长度-= 256;
    }
    if (长度> 0)
    {
    SF25FL_ConfigMode_Write (dstOffstAddr、srcAddr、length、flashHandle);
    }
    }
    
    
    pagesize = 256;
    byteAddr = dstOffstAddr &(pagesize - 1);// bytAddr = dstOffstAddr % pagesize-1。
    if (QSPI_OPER_MODE_MMAP =OBJECT->qspiMode)
    {
    for (actual = 0;actual < length;actual+=chunkLen)
    {
    //写入使能
    S25FLFlash_WriteEnable (flashHandle);
    
    if (length - actual < pagesize - byteAddr)
    {
    chunkLen =长度-实际值;//< 256。 最后一次进入这里
    。}
    其他
    {
    chunkLen = pagesize - byteAddr;//= 256。 此处进入大多数迭代、但循环的最后一次迭代除外。
    }
    
    transaction.txBuf =(unsigned char *) dstOffstAddr;
    transaction.rxBuf = srcAddr;
    transaction.count = chunkLen;
    
    transferType = SPI_TRANSACTION 类型写入;
    if (dstOffstAddr > 0xFFFFFFU)
    {
    transferCmd = QSPI_LIB_CMD_PAGE_PRG_4B;
    addrLengthInBytes = 4;
    }
    其他
    {
    transferCmd = QSPI_LIB_CMD_PAGE_PRG;
    addrLengthInBytes = 3;
    }
    
    /*以字(字节)为单位的事务帧总长度*/
    frmLength = 1 + addrLengthInBytes + chunkLen;
    
    SPI_CONTROL (handle、SPI_V1_CMD_SETFRAMELENGTH、((void *)&frmLength));//由 Anders 调试添加
    
    SPI_CONTROL (handle、SPI_V1_CMD_TRANSFERMODE_RW、(void *)&transferType);
    SPI_CONTROL (handle、SPI_V1_CMD_MMAP_TRANSFER_CMD、(void *)&transferCmd);
    
    
    RetVal = SPI_transfer (handle、&transaction);
    
    //检查闪存状态是否完成
    while ((FlashStatus (flashHandle)& 0x1U));
    
    dstOffstAddr += chunkLen;
    srcAddr += chunkLen;
    }
    }
    返回 RetVal;
    } 

    这是我尝试在 mmap 模式下一次写入256个字节(除了循环的最后一次迭代、其中写入<256)的代码。 使用此代码时、仅正确回读第一个字节。 请注意、我添加了该行
    SPI_CONTROL (handle、SPI_V1_CMD_SETFRAMELENGTH、((void *)&frmLength));//由 Anders 调试添加
    我不知道是否需要这条线路。

    感谢您的持续支持、

    Anders。

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

    感谢您的支持、

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

    很抱歉耽误您就此问题返回。 现在、我可以使用您提供的大量代码在我的板上报告您的问题、我正在积极调试该问题。 我将告诉您我的调查结果。 就我所知、QSPI 闪存写入器代码依赖于电路板库中定义的闪存函数、而 QSPI 示例使用本地定义的闪存函数。

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

    安德斯

    我对 SBL QSPI 闪存n`t 器重复了相同的实验、但没有发现这个问题。 QSPI 闪存写入器正在 CONFIG 和 QUADMODE 中设置 QSPI 、并从 SD 卡中读取269KB 文件并将其编程到闪存中。  写入映像后、闪存写入器使用 名为 checkflash 的函数执行回读和验证、当我 在该代码中设置断点时、 对于已编程的269KB 映像的整个大小、我在读取和写入缓冲区中看到相同的值:

    我会将测试示例中使用的代码与 QSPI 闪存写入器代码进行比较、并告诉您测试 失败的原因。

    此致、

    Rahul

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

    您好 Rahul、

    感谢您为帮助我而付出的努力、我非常感谢您的努力。

    我现在再次尝试运行预编译的.out 文件 C:\ti\pdk_am57xx_1_0_8\packages/ti\boot\sbl\tools\flashWriter\QSPI\bin\idkAM571x\QSPI_flash_writer.out

    首先、我在内存浏览器中的 checkFlash 函数的开头看到的结果与您相同。 但是、我注意到未使用配置模式。 使用 mmap 模式、并且每次 QSPI 传输1个字节。 复制269 KB 文件大约需要40秒钟。 这对于我们的项目来说太长了。 如果为每个 QSPI 传输写入256字节、则耗时不到5秒。 您的卡使用多长时间对269KB 闪存进行编程?

    添加一些图像以显示使用了 MMAP 模式。 您能否验证您的 flashwriter 程序是否正在使用配置模式、并且使用的时间远低于40秒?  

    请注意事务计数= 1、这意味着在每个 SPI_TRANSFCTION 中传输1个字节。 另请注意 object->qspiMode = QSPI_OPER_MODE_MMAP。

    感谢您的持续支持、

    Anders。

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

    安德斯

    我确认了闪存写入器处于 MMAP 模式而不是配置模式、还注意到驱动器被配置为不使用中断、这可能是 它运行如此缓慢的原因、而不是一次写入一个字节。  

    在此平均时间内、我们已经能够找出导致 QSPI LLD 测试案例问题的根本原因、以下是可用于验证的更新文件。

    e2e.ti.com/.../main_5F00_flash_5F00_read_5F00_test.c

    e2e.ti.com/.../S25FL.c

    请尝试更新、并告知我们您是否仍然遇到配置模式或 MMAP 模式问题、而不是闪存的读取和写入速度问题。

    此致、

    Rahul

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

    Rahul、

    感谢您的帮助和文件。

    我实现了新的 S25FL.c、并且可以看到、对于小型数据缓冲区、代码正在工作。 我现在能够正确回读超过1页(256字节)的内容。

    但是、在配置模式下使用闪存写入器代码后、我无法启动卡。 (我在 checkFlash 函数中得到错误)。 使用 MMAP 模式时卡正在引导(但使用的时间太长)。

    我注意到、对于较大的数据缓冲区、我不会读回您的测试文件中的正确数据。 这似乎是针对大于64KB 的缓冲区(一个块)。

    您能否验证一下、在您的工作系统中、您能够使用 QSPI_TEST_LENGTH > 16384读回数据。 (我不是)。

    再次感谢您的支持、

    Anders

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

    您好 、有更新吗?

    如前所述、当为每个 SPI_TRANSFORY 复制1个字节时、使用存储器映射模式时、我能够对电路板进行编程和引导。 这需要太长的时间、因此我们需要弄清两个方面中的一个:如何使用 mmap 模式正确编程1字节以上的数据、或者如何使用配置模式对大数据缓冲区进行编程。 首先、我只能使用配置模式正确编程256字节。 在您之前的帖子中使用附加的代码时、我能够使用配置模式对64KB (65536字节)进行编程。 我很感激、但我要编程到闪存的文件都大于64KB。

    我已经对这个问题做了更多的调试。

    调试时、我尝试两种方法:复制文件(使用闪存写入器代码)、以及复制具有自生成数据和定义长度和偏移的缓冲区(使用 QSPI_BasicExample_idkAM571x_armTestProject 作为基础代码)。

    让我们首先看看采用 mmap 模式的闪存写入器代码:文件被正确复制。

    现在、让我们更改代码、以便使用 cfg 模式:

    现在、在 cfg 模式下、我在接收缓冲区(0x83000000)中仅看到0:

    那么、让我们看看在 cfg 模式下发生了什么(使用测试项目)。 首先让我们告诉代码如何对64*256 uint32_t 进行编程(这是256*64*4字节= 64KB)。 (请注意、为了进行调试、我已用 BBBB 填充 txBuf、并用 AAAAA 填充 rxBuf。 如下图所示、数据被正确复制、长度为64KB。

    然后、让我们看看传输长度为64 KB + 4字节时会发生什么情况。 第二个 uint32_t 被填充为0 (它最初被组装为 AAAAAAAA)、最后一个 uint32_t 被填充为 FFFFFFFF。

    此外、让我们看看 transferLength 64KB + 8字节会发生什么情况。 第二个和第三个 uint32_t 被填充为0、最后两个 uint32_t 被填充为 F。

    此外、让我们看看当传输长度为2个块(128 KB)时会发生什么情况:

    我不确定传输长度大于64KB 的配置模式会发生什么情况。 但我在代码中单步执行时看到  、在 QSPI_v1.c 文件中的 QSPI_CMD_MODE_WRITE_v1中使用了正确的数字 我无法引导这一事实表明未传输正确的数据。 我在使用配置模式时看到读取函数工作正常。

    要测试的另一件事是将我发送给您的主测试文件中的 addrValue 更改为0x10000。 (使写入从第二个块开始(64KB + 1))。 这在 mmap 模式下对我有效、但在 cfg 模式下只读回 F。

    你如何建议我继续  

    感谢您的帮助。

    此致、

    Anders

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好
    是否有更新?
    如果您有时间写回大于0x10000的地址、我将不胜感激。

    提前感谢、

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

    我没有n`t 此问题的更新、因为由于分配给我的其他任务、我没有在该问题上花费任何额外的时间。

    在配置模式下,如果要写入的块多于块,则需要计算块数量和偏移量,如引导包中提供的闪存写入器中所做的那样。 这就是我接下来要尝试的内容。

    我们发现的另一件事是、S25FL.c 文件是电路板库中 QSPI_FLASH.c 文件中函数的副本。 引导软件包使用电路板库函数、但测试使用这些局部定义的函数、因此我将查看这些局部定义的函数是否存在一些错误、这些错误会导致您看到的问题。

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


    我们现在已经找到了解决此问题的方法。 您不再需要查找错误。 我们现在将大文件写入具有配置模式的闪存。

    我将在今天晚些时候或星期一在这里提供解决方案。

    感谢您发送给我们的文件、他们为我们提供了正确的方向。

    此致、
    Anders。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您确认您能够解决此问题、如果您可以将解决方案发布到此处、以供可能遇到此问题的其他用户使用、我们将不胜感激。

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

    解决方案:

    我们注意到、在(S25FL.c)中的 S25FLFlash_BlockErase 函数中、地址的字节"翻转"、如下所示:

    但是、 在 SF25FL_ConfigMode_Write 函数中、未完成此操作。

    因此、我们更改为4字节寻址模式(QSPI_LIB_CMD_PAGE_PRG_4B)、并按照擦除函数中相同的方式翻转目标地址的字节:

     

    e2e.ti.com/.../6685.S25FL.c

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

    我还在 QSPI 闪存驱动程序上发现了一些其他问题:

    1。
    S25FLFlash_QuadModeEnable 不起作用:
    -闪存写入使能命令不会发送到闪存,因此 WRR 寄存器不能更改。
    - uint32_t 栈变量"norStatus"和 configReg 被传递到返回的读取函数
    8位数据。 这些变量的高24位未更改并统一。
    Newerthelerr 这些32位值与提供的新状态和配置寄存器值组合
    完全未定义的值。 这些是传输到闪存中的 WRR 寄存器的数据。
    幸运的是、写入使能命令不会被发送、这样闪存就不接受这些值。
    否则、可能会设置一些可将部分或整个闪存翻转为不可撤销的位
    受写保护!
    -字节(命令、状态寄存器值、配置寄存器值)以错误的顺序传输
    (命令作为最后一个字节输出、但必须是第一个字节)

    由于四模式使能标志存储为闪存中的非易失性值、因此可能不会注意到
    如果已通过其他方式设置了该标志、则 S25FLFlash_QuadModeEnable 不起作用。

    2.
    配置模式下的读取访问也需要字节翻转(如上述文章中的注释)。

    3.
    SF25FL_bufferWrite 在配置模式下始终返回"false"(函数内部返回值从不设置"true")

    4.
    函数 S25FLFlash_Enable4ByteAddrMode (未使用)使用未定义的闪存命令值
    S25FL256用户手册中未定义 QSPI_LIB_CMD_ENTER_4_BYTE_ADDR = 0xB7。
    QSPI_LIB_CMD_EXIT_4_BYTE_ADDR = 0xE9定义为密码解锁。

    5.没有错误,但无论如何都很伤心:
    尽管 QSPI 硬件可提供高达128位的传输、但 QSPI 驱动器仅使用8位传输。
    因此、由于 QSPI 硬件不提供、这会浪费已经非常占用 CPU 的性能
    DMA 访问。

    此致、
    Markus