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.

[参考译文] CC3220S-LAUNCHXL:简单 SPI 环回

Guru**** 2560530 points
Other Parts Discussed in Thread: CC3220S, CC3220SF

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/666810/cc3220s-launchxl-simple-spi-loopback

器件型号:CC3220S-LAUNCHXL
主题中讨论的其他器件:CC3220SCC3220SF

我正在尝试创建一个环回、使用 SPII 在 MOSI 和 MISO 引脚之间连接一条物理线。 我还尝试使用示波器读取 MOSI 和 CLK 信号、但它们仅显示一条平坦的线。 UART 环回示例代码工作正常。 CC3220S 上实际上没有任何 SPI 示例代码、但看起来不像这样应该太困难。 我的代码是:

   #define MSGSIZE 20.
   SPI_Handle     SPI;
   SPI_Params     spiParams;
   SPI_Transaction spiTransaction;
   uint8_t        transmitBuffer[MSGSIZE];
   uint8_t        receiveBuffer[MSGSIZE];
   bool           transferOK;
   
   
   
   SPI_Params_init (&spiParams); //初始化 SPI 参数
   //默认参数
   spiParams.transferMode = SPI_MODE_BLOCKING;
   spiParams.transferTimeout = SPI_WAIT_FOREVER;
   spiParams.transferCallbackFxn =空;
   spiParams.mode = SPI_MASTER;
   spiParams.bitrate = 1000000;
   spiParams.dataSize = 8;      // 8位数据大小
   spiParams.frameFormat = SPI_POL0_PHA0;
   spiParams.custom=空;
   
   SPI = SPI_OPEN (Board_SPI0、&spiParams);
   if (SPI == NULL){
       while (1); // spi_open()失败
   }

   
   对于(i = 0;i < MSGSIZE;i++){
       transmitBuffer[i]= i;
       receiveBuffer[i]= 0;
   }
   
   //填入 transmitBuffer
   spiTransaction.count = MSGSIZE;
   spiTransaction.txBuf = transmitBuffer;
   receivTransaction.rxBuf = spieBuffer;
   

   while (1){
       transferOK = SPI_transfer (SPI、&spiTransaction);
       如果(!transferOK){
           GPIO_WRITE (Board_GPIO_LED0、Board_GPIO_LED_OFF);
           // SPI 中出现错误或传输已在进行中。
       }
   }

如果存在传输问题、我会关闭 LED、但 LED 永远不会关闭。 我将 P05作为 CLK、将 P06作为 MISO、将 P07作为 MOSI、将 P08作为 CS。 我在示波器上测量 CLK 和 MOSI、MOSI 和 MISO 也通过电线物理连接。

如果您想了解 SPI 为何不能以正确的方向产生任何比特流或微移、我们将不胜感激。 谢谢。

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

    您好!

    您是否在 SPI_open()之前调用了 SPI_init()? 您是否能够越过 IF (SPI == NULL)?

    您正在使用 Board_SPI0。
    您是否修改了 CC3220SF_LAUNCHXL.c 中 SPICC32XXDMA_HWAttrsV1[Board_SPI0]中的引脚?


    此致、
    Toby

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,我在 SPI_open()之前调用 SPI_init()。 我还能够获得超过 SPI=NULL 的值。 这是我的 SPICC32XXDMA_HWAttrsV1。

    CONST SPICC32XXDMA_HWAttrsV1 spiCC3220SDMAHWAttrs[CC3220S_LAUNCHXL_SPICOUNT]={
    /*索引0为链接到 NWP 的 LSPI 预留*/

    baseAddr = LSPI_base、
    .intNum = INT_LSPI、
    .intPriority =(~0)、
    spiPRCM = PRCM_LSPI、
    .csControl = SPI_SW_CTRL_CS、
    csPolarity = SPI_CS_ACTIVEHIGH、
    .pinMode = SPI_4PIN_MODE、
    .TurboMode = SPI_Turbo_OFF、
    scratchBufPtr =&spiCC3220SDMAscratchBuf[CC3220S_LAUNCHXL_SPI0]、
    defaultTxBufValue = 0、
    .rxChannelIndex = UDMA_CH12_LSPI_RX、
    txChannelIndex = UDMA_CH13_LSPI_TX、
    .minDmaTransferSize = 100、
    .mosipin = SPICC32XXDMA_PIN_NO_CONFIG、
    MISO 引脚= SPICC32XXDMA_PIN_NO_CONFIG、
    clkPin = SPICC32XXDMA_PIN_NO_CONFIG、
    csPin = SPICC32XXDMA_PIN_NO_CONFIG
    }、

    baseAddr = GSPI_base、
    .intNum = INT_GSPI、
    .intPriority =(~0)、
    spiPRCM = PRCM_GSPI、
    .csControl = SPI_HW_CTRL_CS、
    csPolarity = SPI_CS_ACTIVELOW、
    .pinMode = SPI_4PIN_MODE、
    .TurboMode = SPI_Turbo_OFF、
    scratchBufPtr =&spiCC3220SDMAscratchBuf[CC3220S_LAUNCHXL_SPI1]、
    defaultTxBufValue = 0、
    .rxChannelIndex = UDMA_CH6_GSPI_RX、
    txChannelIndex = UDMA_CH7_GSPI_TX、
    .minDmaTransferSize = 100、
    .mosipin = SPICC32XXDMA_PIN_07_MOSI、
    MISO 引脚= SPICC32XXDMA_PIN_06_MISO、
    clkPin = SPICC32XXDMA_PIN_05_CLK、
    csPin = SPICC32XXDMA_PIN_08_CS、

    };


    在 board.h 中、已经有一行:
    #define Board_SPI0 CC3220S_LAUNCHXL_SPI1

    因此、我很确定它会进入数组中的第二个、其中 MOSI=pin7、Miso=PIN6、而 CLK=pin5。

    此外、对于回送、我刚刚意识到您需要一个主器件和一个从器件、而不仅仅是一个单个器件、但是如果我正确理解了这一点、我仍然应该能够读取示波器上的 CLK 引脚和 MOSI 引脚。 我仍然没有在主器件的 CLK 引脚上获得信号。 我只是想尝试从 CLK 获取时钟信号、从 MOSI 获取数字波形、然后在那里工作。 谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    除了 drivers/SPI.h 文件中的 SPI 示例代码外、TI-CC3220S 是否还有 SPI 示例代码?