单片机/MCU论坛
直播中

从未拥有

9年用户 950经验值
擅长:可编程逻辑 电源/新能源 光电显示
私信 关注

XMC7200 codeflash要写长度64bits的数据应该如何操作呢?

你好,我现在在对xmc7200codeflash区写数据的时候发现只能按512Bytes大小写去,但数据手册里描述的支持64bits写入。SDK里面的Cy_Flash_ProgramRow里面的函数里:
flashContext.opcode = CY_FLASH_OPCODE_PROGRAM_ROW | CY_FLASH_BLOCKING_MODE;
flashContext.arg1   = CY_FLASH_DATA_LOC_SRAM;(CY_FLASH_DATA_LOC_SRAM=0x100,这个字段不是定义数据长度的么?)
flashContext.arg2   = rowAddr;
flashContext.arg3   = (uint32_t)data;

请问如果我要写长度64bits的数据应该如何操作呢?

                                                                                                                                                                                                                                                                                                                                                                                               

回帖(1)

李英

2024-2-1 17:09:57
XMC7200的codeflash主要操作是以512字节为单位的。但是,你可以使用以下步骤来写入一个64位的数据:

1. 首先,将64位的数据拆分为8个字节(64位/ 8位=8个字节)。
2. 将拆分后的每个字节写入到对应的512字节的块中。这意味着每个512字节块只写入了8个字节,其余字节应设置为0。
3. 即使只写入了8个字节,仍然需要将整个512字节的块进行擦除和编程。这是因为,对于XMC7200的codeflash来说,只能以512字节的方式进行擦除和编程。

以下是一个示例代码,用于将64位的数据写入到XMC7200的codeflash中:

```c
#include "cy_flash.h"

void write64bitData(uint64_t data, uint32_t rowAddr)
{
    uint8_t buffer[512] = {0};
   
    // Split 64-bit data into 8 bytes
    for (int i = 0; i < 8; i++)
    {
        buffer[i] = (data >> (i * 8)) & 0xFF;
    }
   
    // Erase and program 512-byte block
    cy_flash_context_t flashContext;
    flashContext.opcode = CY_FLASH_OPCODE_PROGRAM_ROW | CY_FLASH_BLOCKING_MODE;
    flashContext.arg1 = CY_FLASH_DATA_LOC_SRAM;
    flashContext.arg2 = rowAddr;
    flashContext.arg3 = (uint32_t)buffer;
   
    Cy_Flash_ProgramRow(&flashContext);
}
```

请注意,在实际使用中,你可能还需要添加错误处理和完成后的操作。

希望对你有所帮助!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分