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.

[参考译文] CC2652R:cc2652R1

Guru**** 2589280 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1033395/cc2652r-cc2652r1

器件型号:CC2652R
Thread 中讨论的其他器件:SysConfig

您好、先生、

IAM 使用 SysConfig 在简单 外设中将 SPI 配置为主器件、在简单中央代码中将 SPI 配置为从器件。 要将其配置为主器件或从器件、需要执行哪些相关更改?

提供了一些枚举、例如 SPImode 和 SPI 帧格式等、我们是否应该使用这些枚举来编写命令、以便将 SPI 配置为从器件还是主器件?

谢谢、此致

Anushka

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

    你好,Anushka

    我建议在此处查看 SPI 上的 API 参考。 它将向您展示您需要编写的代码。

    https://dev.ti.com/tirex/content/simplelink_cc13x2_26x2_sdk_5_20_00_52/docs/drivers/doxygen/html/_s_p_i_8h.html

    其他所有内容都应在 SysConfig 中配置。 还可以考虑查看 drivers 文件夹中的示例。

    最棒的

    不需要

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

    您好、先生、

    我尝试更改默认参数、例如 MODE = SPI_SLAVE 和 SPI_MASTER。 我希望在一个项目中将模式设置为 SPISLAVE、在其他项目中将模式设置为 SPIMASTER、但当我进行更改时、它会重定向到 SPI.h 文件。 在一个工程中所做的更改会在另一个工程中反映出来、也就是说、如果将 MODE 选为 SPI_SLAVE、则会在两个工程中更新该模式、因为这两个工程无法将一个工程配置为从工程、将另一个配置为主工程。  

    这是因为 SDK 中的 SPI.h 路径相同。

    请帮我解决这个问题吗?

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

    您好!

    解决方案是不更改默认参数、而是在打开驱动程序时更改参数、如中提供的 spislave 示例所示 \examples\rtos\CC26X2R1_LAUNCHXL\drivers。

    第二个选项是生成文件的本地副本(即在您的项目中)。 但我不建议使用这种方法、因为它会导致您复制大量代码。

    我希望这将有所帮助、]

    此致、

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

    您好!

    IAM 使用建议的第一种方法(在操作驾驶员时更改参数)。

    在将 SPI 作为从器件进行操作之前、SDK 中提供的 SLISLAVE 项目中的从器件缓冲区中生成了一个消息副本。 IAM 尝试执行相同操作(将数据从主缓冲区复制到从缓冲区(接收缓冲区))。

    但它抛出错误: 错误:符号"strncpy"重新声明为不兼容的类型:
    "unsigned char *(unsigned char * restrict、const unsigned char * restrict、
    size_t)"

    实现的片段如下所示:

    spiParams.frameFormat = SPI_POL0_PHA0;
    spiParams.mode = SPI_SLAVE;
    spiParams.transferCallbackFxn =空;
    spiParams.transferMode = SPI_MODE_BLOCKING;
    spiParams.bitrate = 1000000;
    //SPI = SPI_open (CONFIG_SPI_SLAVE、&spiParams);
    spiParams.dataSize = 8;// 8位数据大小
    SPI = SPI_open (CONFIG_SPI_0、&spiParams);
    if (SPI == NULL){
    while (1);// spi_open()失败

    //填入 transmitBuffer
    strncpy ((char *) receiveBuffer、(char *) transmitBuffer、MSGSIZE);
    spiTransaction.count = MSGSIZE;
    spiTransaction.txBuf =(void *) transmitBuffer;
    spiTransaction.rxBuf =(void *) receiveBuffer;

    transferOK = SPI_transfer (SPI、&spiTransaction);

    此外、我尝试输入 display 语句并查看代码流。 它似乎进入 SPI_TRANSFIT、但不会返回。

    请帮助我解决此问题。

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

    Anushka、您好、我特别喜欢以下几点:

    1.为什么要将发送缓冲区复制到接收缓冲区? 这就是您发布的代码尝试执行的操作。

    2.我认为问题可能是您的传输缓冲区未声明为 const char *、而可能声明为 char *、从而导致错误消息。 您可以将其转换为 char *、但随后仍将传输缓冲区复制到接收缓冲区、这不一定很有意义。  

    3.我看不到您在何处设置 transmitBuffer 的值。 如果这只是一个空指针、那么它将被复制到 receiveBuffer 中、并且 RxBuf/TxBuf 也都为空。

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

    您好、先生、

    但在这种情况下、我应该得到 NULL 传输缓冲区和接收缓冲区中的值、作为 NULL 传输传输。 但我会得到一些恒定的垃圾值(558842129)。

    在从器件配置中,当我浏览数据表时,发现我们需要使用 AUX_IO 寄存器配置 CS 引脚。 如果我使用第一种方法(在操作驱动程序之前更改参数),是否有必要执行此操作?

    此外、当 iam 在 TX 缓存中发送某些消息时、如 SDK 中的 spislave 代码所示、传输状态似乎始终为 false。 这是因为 SysConfig 中存在任何配置问题、还是这是代码问题?

    spiParams.frameFormat = SPI_POL0_PHA1;
    spiParams.mode = SPI_SLAVE;
    spiParams.transferCallbackFxn = transferCompleteFxn;
    spiParams.transferMode = SPI_MODE_CALLACK;
    spiParams.bitrate = 4000000;
    //SPI = SPI_open (CONFIG_SPI_SLAVE、&spiParams);
    spiParams.dataSize = 8;// 8位数据大小
    SPI = SPI_open (CONFIG_SPI_0、&spiParams);
    if (SPI == NULL){
    while (1);// spi_open()失败

    //填入 transmitBuffer

    strncpy ((char *) transmitBuffer、slave_MSG、MSGSIZE);


    对于(int i = 0;i < loop;i++){
    /*初始化从属 SPI 事务结构*/
    transmitBuffer[sizeof (slave_MSG)- 1]=(I % 10)+'0';
    memset ((void *) transmitBuffer、0、MSGSIZE);
    spiTransaction.count = MSGSIZE;
    spiTransaction.txBuf =(void *) transmitBuffer;
    spiTransaction.rxBuf =(void *) receiveBuffer;

    // spiTransaction.count = MSGSIZE;
    // spiTransaction.txBuf =(void *) transmitBuffer;
    // spiTransaction.rxBuf =(void *) receiveBuffer;

    transferOK = SPI_transfer (SPI、&spiTransaction);


    if (transferOK){
    display_printf (dispHandle、sc_row_separator_1、0、"transfer ok===== %s"、spiTransaction.txBuf);
    // Display_printf (dispHandle、sc_row_separator_2、0、"rxbuf===== %d"、spiTransaction.rxBuf);
    // SPI 中出现错误或传输已在进行中。
    // while (1);


    如果(transferStatus == false)

    display_printf (dispHandle、sc_row_separator_2、0、"fals=== %s"、spiTransaction.txBuf);

    其他

    display_printf (dispHandle、sc_row_separator_1、0、"从器件接收:%s"、spiTransaction。rxBuf);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="496222" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1033395/cc2652r-cc2652r1/3825780 #3825780">但在本例中,我应该得到 transmitbuffer 和 receivebuffer 内部的值为 NULL ryt。 但我会得到一些恒定的垃圾值(558842129)。

    此垃圾值听起来像是空指针的剩余值。 您似乎没有为该指针分配任何内容、因此我无法准确预测您尝试读取其值时会发生什么情况。

    [引用 userid="496222" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1033395/cc2652r-cc2652r1/3825780 #3825780]1. 在从器件配置中,当我浏览数据表时,发现我们需要使用 AUX_IO 寄存器配置 CS 引脚。 如果我使用第一种方法(在使用驱动程序之前更改参数)、是否有必要执行此操作?

    这应该在 SysConfig 中进行配置。

    [引用 userid="496222" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1033395/cc2652r-cc2652r1/3825780 #3825780"]2. 此外、当 iAM 在 TX 缓存中发送某些消息时、如 SDK 中的 spislave 代码所示、传输状态似乎始终为 false。 这是因为 SysConfig 中存在任何配置问题还是因为代码问题?[/quot]

    您尚未显示为该变量设置值的位置、因此我不知道它为什么会为您显示为 false。 在 SysConfig 中找不到该选项。