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.

[参考译文] TMS320F28388D:如何在 CPU2中配置 SPI

Guru**** 2610435 points
Other Parts Discussed in Thread: TMS320F28388D, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/986147/tms320f28388d-how-to-configure-spi-in-cpu2

器件型号:TMS320F28388D
主题中讨论的其他器件: C2000WARE

你(们)好,先生。

我使用的是 tms320f28388D 定制板。

我一直在使用集成在定制板中的外部闪存来实现 DFU。

目前、我使用来自外部闪存的 SPI 通信存储和读取 CPU1引导映像、并从 CPU1成功引导。

同样、我尝试 使用 SPI 从 CPU2中的外部闪存存储器存储和读取 CPU2映像。

因此、我像这样设置它:

------------------------------------------------------------------

[CPU1]

device_init();
DEVICE_initGPIO();

//GPIO 设置

GPIO_setPinConfig (GPIO_16_GPIO16);//GPIO16 -> FLASH_WP
GPIO_setPinConfig (GPIO_57_GPIO57);//GPIO57 -> FLASH_CS
GPIO_setPinConfig (GPIO_54_SPIA_SIMO);-> FLASH_SIMO
GPIO_setPinConfig (GPIO_55_SPIA_SOMI);-> FLASH_SOMI
GPIO_setPinConfig (GPIO_56_SPIA_CLK);-> FLASH_CLK


GPIO_setDirectionMode (FLASH_WP、GPIO_DIR_MODE_OUT);
GPIO_setPadConfig (FLASH_WP、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (FLASH_WP、GPIO_QUAL_SYNC);


GPIO_setDirectionMode (FLASH_CS、GPIO_DIR_MODE_OUT);
GPIO_setPadConfig (FLASH_CS、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (FLASH_CS、GPIO_QUAL_SYNC);


GPIO_setDirectionMode (100、GPIO_DIR_MODE_OUT);
GPIO_setPadConfig (100、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (100、GPIO_QUAL_SYNC);

GPIO_setMasterCore (16、GPIO_CORE_CPU2);//wp
GPIO_setMasterCore (57、GPIO_CORE_CPU2);/CS
GPIO_setMasterCore (54、GPIO_CORE_CPU2);//SIMO
GPIO_setMasterCore (55、GPIO_CORE_CPU2);//SOMI
GPIO_setMasterCore (56、GPIO_CORE_CPU2);//CLK

GPIO_setMasterCore (100、GPIO_CORE_CPU2);//CPU2引导检查 GPIO

GPIO_writePin (FLASH_WP、1);//高电平
GPIO_writePin (FLASH_CS、1);//高电平

//SPI 设置

SYSCTL_selectCPUForPeripheral (SYSCTL_CPUSEL6_SPI、1、SYSCTL_CPUSEL_CPU2);

SPI_disableModule (SPIA_BASE);
SPI_setConfig (SPIA_BASE、DEVICE_LSPCLK_FREQ、SPI_PROT_POL0PHA1、SPI_MODE_MASTER、1000000、 8);
SPI_disableFIFO (SPIA_BASE);
SPI_disableLoopback (SPIA_BASE);
SPI_setEmulationMode (SPIA_BASE、SPI_emulation_stop_midway);
SPI_enableModule (SPIA_BASE);

//引导至 CPU2

DEVICE_BOOTCPU2 (BOOTMODE_BOOT_TO_FLASH_SECTOR0);

//CTU2 检查

while (GPIO_readPin (100)=0);

while (1)

   (笑声)

[CPU2]

device_init();

CS_LOW;
SPI_writeDataBlockingNonFIFO (SPIA_BASE、WREN);
SPI_readDataBlockingNonFIFO (SPIA_BASE);->已停止。
CS_HIGH;

GPIO_writePin (100、1);

while (1)

   (笑声)

 ------------------------------------------------------------------

问题是 GPIO 设置正常、但在使用来自 CPU2的 SPI 通信获取数据时冻结。

我想知道 我的错了什么。 在 TRM 或 c2000ware 中似乎无法使用 CPU2的 SPI。

我可以 在 CPU2上使用 SPI 吗? 如果是、我应该如何配置 SPI?

谢谢你。

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

    突然我发现 并解决了问题!

    我只需在  CPU1中配置 GPIO、并在 CPU2中配置 SPI 通信。

    示例

    ------------------------------------------------------------------

    [CPU1]

    device_init();
    DEVICE_initGPIO();

    //GPIO 设置

    GPIO_setPinConfig (GPIO_16_GPIO16);//GPIO16 -> FLASH_WP
    GPIO_setPinConfig (GPIO_57_GPIO57);//GPIO57 -> FLASH_CS
    GPIO_setPinConfig (GPIO_54_SPIA_SIMO);-> FLASH_SIMO
    GPIO_setPinConfig (GPIO_55_SPIA_SOMI);-> FLASH_SOMI
    GPIO_setPinConfig (GPIO_56_SPIA_CLK);-> FLASH_CLK


    GPIO_setDirectionMode (FLASH_WP、GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig (FLASH_WP、GPIO_PIN_TYPE_PULLUP);
    GPIO_setQualificationMode (FLASH_WP、GPIO_QUAL_SYNC);


    GPIO_setDirectionMode (FLASH_CS、GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig (FLASH_CS、GPIO_PIN_TYPE_PULLUP);
    GPIO_setQualificationMode (FLASH_CS、GPIO_QUAL_SYNC);


    GPIO_setDirectionMode (100、GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig (100、GPIO_PIN_TYPE_PULLUP);
    GPIO_setQualificationMode (100、GPIO_QUAL_SYNC);

    GPIO_setMasterCore (16、GPIO_CORE_CPU2);//wp
    GPIO_setMasterCore (57、GPIO_CORE_CPU2);/CS
    GPIO_setMasterCore (54、GPIO_CORE_CPU2);//SIMO
    GPIO_setMasterCore (55、GPIO_CORE_CPU2);//SOMI
    GPIO_setMasterCore (56、GPIO_CORE_CPU2);//CLK

    GPIO_setMasterCore (100、GPIO_CORE_CPU2);//CPU2引导检查 GPIO

    GPIO_writePin (FLASH_WP、1);//高电平
    GPIO_writePin (FLASH_CS、1);//高电平

    //SPI 设置

    SYSCTL_selectCPUForPeripheral (SYSCTL_CPUSEL6_SPI、1、SYSCTL_CPUSEL_CPU2);<-非常重要!!!

    SPI_disableModule (SPIA_BASE);
    SPI_setConfig (SPIA_BASE、DEVICE_LSPCLK_FREQ、SPI_PROT_POL0PHA1、SPI_MODE_MASTER、1000000、 8);
    SPI_disableFIFO (SPIA_BASE);
    SPI_disableLoopback (SPIA_BASE);
    SPI_setEmulationMode (SPIA_BASE、SPI_emulation_stop_midway);
    SPI_enableModule (SPIA_BASE);

    //引导至 CPU2

    DEVICE_BOOTCPU2 (BOOTMODE_BOOT_TO_FLASH_SECTOR0);

    //CTU2 检查

    while (GPIO_readPin (100)=0);

    while (1)

       (笑声)

    [CPU2]

    device_init();

    SPI_disableModule(SPIA_BASE);
    SPI_setConfig(SPIA_BASE, DEVICE_LSPCLK_FREQ, SPI_PROT_POL0PHA1, SPI_MODE_MASTER, 1000000, 8);
    SPI_disableFIFO(SPIA_BASE);
    SPI_disableLoopback(SPIA_BASE);
    SPI_setEmulationMode(SPIA_BASE, SPI_EMULATION_STOP_MIDWAY);
    SPI_enableModule(SPIA_BASE);

    CS_LOW;
    SPI_writeDataBlockingNonFIFO (SPIA_BASE、WREN);
    SPI_readDataBlockingNonFIFO (SPIA_BASE);  
    CS_HIGH;

    GPIO_writePin (100、1);

    while (1)

       (笑声)

     ------------------------------------------------------------------

    我误解了是否应在 CPU1上保留所有设置。

    我认为最好是提及其他人。

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

    很高兴知道您能够解决问题。