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.

[参考译文] TMS570LS0432:任何人都有通过 SPI 传输的 TMSTMS570LS0432闪存 W25Q32示例代码

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1515236/tms570ls0432-anyone-had-example-code-for-flash-w25q32-with-tmstms570ls0432-over-spi

器件型号:TMS570LS0432

工具/软件:

您好:

在 SPI 上查找适用于闪存 W25Q32和 TMSTMS570LS0432的示例代码。 其中应该有写入和读取示例。

此致、

镍锡

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

    您好:还可以找到我的示例代码及其调试输出、

    #include "system.h"
    包含"spi.h"
    #include "string.h"

    void W25Q32_WriteEnable (void)

    uint16 t[1]={0x06};

    spiDAT1_t dataconfig ={
    .CS_HOLD = false、
    .WDEL = false、
    .DFSEL = SPI_FMT_0、//格式0 (8位、CPOL=0、CPHA=0)
    .csSNR = SPI_CS_1 // CSSNR =~μ s (1 << CS1)→0b11111110
    };

    spiSendData (spiREG2、&dataconfig、1、TX);
    }

    void W25Q32_WaitWhileBusy (void)

    UINT16 TX[2]={0x05、0x00};
    uint16 rx[2]={ 0 };
    uint32_t TIMEOUT = 1000000;

    spiDAT1_t dataconfig ={
    .CS_HOLD = false、
    .WDEL = false、
    .DFSEL = SPI_FMT_0、//格式0 (8位、CPOL=0、CPHA=0)
    .csSNR = SPI_CS_1 // CSSNR =~μ s (1 << CS1)→0b11111110
    };
    执行
    spiTransmitAndReceiveData (spiREG2、&dataconfig、2、TX、Rx);
    超时--;
    IF (超时= 0)

    printf ("等待 WIP 清除时超时\n");
    printf ("Status Reg:0x%02x\n"、(uint8_t)(rx[1]& 0xFF));
    休息;
    }
    }while ((uint8_t)(Rx[1]& 0xFF))& 0x01);
    }

    void W25Q32_Write (Uint32地址、uint8 *数据、Uint32 len)

    Uint16 txBuf[260];

    W25Q32_WriteEnable ();

    //命令+地址
    txBuf[0]= 0x02;
    txBuf[1]=(地址>> 16)& 0xFF;
    txBuf[2]=(地址>> 8)& 0xFF;
    txBuf[3]=地址和0xFF;

    spiDAT1_t dataconfig ={
    .CS_HOLD = TRUE、//在传输后让 CS 变为高电平
    .WDEL = false、
    .DFSEL = SPI_FMT_0、//格式0 (8位、CPOL=0、CPHA=0)
    .csSNR = SPI_CS_1 // CSSNR =~μ s (1 << CS1)→0b11111110
    };

    //有效负载
    for (int i = 0;i < len;i++){
    txBuf[4 + i]= data[i];
    }

    spiSendData (spiREG2、&dataconfig、len+4、txBuf);
    W25Q32_WaitWhileBusy ();
    }

    void W25Q32_read (uint32地址、uint8 *缓冲器、uint32 len)

    Uint16 txBuf[260]={0};
    uint16 rxBuf[260]={0};

    //命令+地址
    txBuf[0]= 0x03;
    txBuf[1]=(地址>> 16)& 0xFF;
    txBuf[2]=(地址>> 8)& 0xFF;
    txBuf[3]=地址和0xFF;

    spiDAT1_t dataconfig ={
    .CS_HOLD = TRUE、//在传输后让 CS 变为高电平
    .WDEL = false、
    .DFSEL = SPI_FMT_0、//格式0 (8位、CPOL=0、CPHA=0)
    .csSNR = SPI_CS_1 // CSSNR =~μ s (1 << CS1)→0b11111110
    };

    spiTransmitAndReceiveData (spiREG2、&dataconfig、len+4、txBuf、rxBuf);

    //有效负载
    for (int i = 0;i < len;i++){
    Buffer[i]= rxBuf[4 + i];
    }
    }

    void W25Q32_readid (uint8_t *id)

    Uint16 txBuf[4]={0x9F、0x00、0x00、0x00};
    uint16 rxBuf[4]={0};

    spiDAT1_t dataconfig ={
    .CS_HOLD = TRUE、//在传输后让 CS 变为高电平
    .WDEL = false、
    .DFSEL = SPI_FMT_0、//格式0 (8位、CPOL=0、CPHA=0)
    .csSNR = SPI_CS_1 // CSSNR =~μ s (1 << CS1)→0b11111110
    };

    spiTransmitAndReceiveData (spiREG2、&dataconfig、4、txBuf、rxBuf);

    ID[0]= rxBuf[1];//Manufactr ID
    ID[1]= rxBuf[2];//存储器类型
    ID[2]= rxBuf[3];//Capacity
    }

    int main()

    spiInit();
    uint8_t jdecid[3];
    W25Q32_readid (jdecid);
    printf ("Manufactr ID:0x%02x\n"、jdecid[0]);
    printf ("存储器类型:0x%02x\n"、jdecid[1]);
    printf ("容量:0x%02x\n"、jdecid[2]);

    const uint32_t targetAddress = 0x000100;
    char writeData[]="Flash Write OK";
    char ReadData[32];

    W25Q32_Write (targetAddress、writeData、strlen (writeData));
    printf ("写入地址的数据:0x%06X\n"、targetAddress);

    W25Q32_READ (targetAddress、ReadData、strlen (writeData));
    printf ("数据读取:%s\n"、ReadData);

    返回0;
    }

    然后将获得类似的调试输出

    制造商 ID:0xEF
    存储器类型:0x40
    容量:0x16
    写入地址:0x000100l 的数据
    等待 WIP 清除时超时
    状态寄存器:0xFF
    读取的数据:yyyyyyyyyyyyyyyy

    请引导我、我使用数据格式 SP 模式0和8字长以及1MHz 波特率

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

    嗨、Nitin、

    [引用 userid="653121" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1515236/tms570ls0432-anyone-had-example-code-for-flash-w25q32-with-tmstms570ls0432-over-spi ] 通过 SPI 查找具有 TMS570LS0432的闪存 W25Q32的示例代码。 应该有写入和读取示例。

    在 W25Q32上没有任何直接的示例。

    我们仅提供了 SPI 示例、您可以在以下常见问题解答中找到这些示例:

    (+)[常见问题解答] TMS570LC4357:适用于 Hercules 控制器的示例和演示(例如 TMS570x、RM57x 和 RM46x 等)-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    通过以上示例作为参考、只需尝试在您的端部实现 如果您遇到任何问题、请告诉我您所面临的确切问题、以便我为您提供指导。

    --
    此致、
    Jagadish。

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

    您好:

    上述所有内容都提到了 SPI 示例、应该为我的应用尝试哪一个。

    MCU 为 TMS570LS0432、FALSH 为 W25Q32、具有带 CS1的 SPI2端口  

    此致、

    镍锡

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

    嗨、Nitin、

    全部都只是通用 SPI 通信示例、您可以参考任何主 SPI 示例、并将您在示例中使用的配置和 API 与它们进行比较。  

    --
    此致、
    Jagadish。

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

    您好 Jagdish、

    实际上、所有示例都不带命令、W25Q32带有命令+地址+数据、并且闪存受写保护、因此在将数据写入闪存之前需要执行 write_enable、然后写入。  

    根据我上面的共享代码、我能够读取 JDEC ID。 这意味着只有当我尝试写入数据但无法写入时、SPI 通信才正确。

    请参阅上述共享代码。

    此致、

    镍锡

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

    您好 Jagdish、

    感谢您的支持。 我得到了解决方案,它是有效的。 这是 SPI API 问题。  我使用了 spiTransmitAndReceiveData API 而不是 spiSendData API、它工作正常。

    此致、

    镍锡