大家好、
在我的应用中、我想通过 SPI 将任意数量的 CPU 板连接在一起:
FSS 和 CLK 信号很常见
TX 和 Rx 从板连接到板
主板应发送数据。 每个板需要1个字节的帧。
我的问题是、是否可以发送任意大小的 SPI 帧? 如果我将帧大小设置为8位、第一个板每次都会得到它、但后面的任何人都不会获得任何有效数据。
此致、
Norbert
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.
大家好、
在我的应用中、我想通过 SPI 将任意数量的 CPU 板连接在一起:
FSS 和 CLK 信号很常见
TX 和 Rx 从板连接到板
主板应发送数据。 每个板需要1个字节的帧。
我的问题是、是否可以发送任意大小的 SPI 帧? 如果我将帧大小设置为8位、第一个板每次都会得到它、但后面的任何人都不会获得任何有效数据。
此致、
Norbert
是的、使用高级模式、启用保持帧。 除了使用 SSIAdvDataPutFrameEnd()发送的最后一个字节之外,您发送的所有 SSIDataPut()字节都是这样的。 要使数据从一个从器件传递到下一个从器件、需要读取接收到的数据、如果 FSS 未失效、则将其放入输出缓冲区、以便将其发送到下一个从器件。 这需要在主器件开始发送下一个字节之前完成。 我必须承认、我没有时间编写和验证该代码、但下面是初始化主设备(示例使用 SSI1)和从设备(示例使用 SSI3)的样子。
#define master SSI1_base #define slave SSI3_base //将 SSI1初始化为主 器件空 QSSIMasterInit (uint32_t SYSCLK_Freq、uint32_t baud _rate) { map_SysCtlPeripheralEnable (sysctl_Periph_SSI1); MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB); MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE); MAP_GPIOPinConfigure (GPIO_PB5_SSI1CLK); MAP_GPIOPinConfigure (GPIO_PB4_SSI1FSS); MAP_GPIOPinConfigure (GPIO_PE4_SSI1XDAT0); MAP_GPIOPinTypeSSI (GPIO_PORTB_AHB_BASE、GPIO_PIN_4 | GPIO_PIN_5); MAP_GPIOPinTypeSSI (GPIO_Porte AHB_BASE、GPIO_PIN_4); MAP_SSIConfigSetExpClk (主器件、SYSCLK_Freq、SSI_FRF_MOTO_MOTO_0、SSI_MODE_MASTER、BAUD_RATE、 8); MAP_SSIEnable (主器件); SSIAdvModeSet (主器件、SSI_ADV_MODE_READ_WRITE); SSIAdvFrameHoldEnable (主器件); } //将 SSI3初始化为从 器件空 QSSISlaveInit (uint32_t SYSCLK_Freq、uint32_t baud_rate) { MAP_SysCtlPeripheralEnable (SYSCTL_Periph_SSI3); MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOQ); MAP_GPIOPinConfigure (GPIO_PQ0_SSI3CLK); MAP_GPIOPinConfigure (GPIO_PQ1_SSI3FSS); MAP_GPIOPinConfigure (GPIO_PQ2_SSI3XDAT0); MAP_GPIOPinTypeSSI (GPIO_PORTQ_BASE、GPIO_PIN_0 | GPIO_PIN_1 |GPIO_PIN_2); MAP_SSIConfigSetExpClk (从器件、SYSCLK_Freq、SSI_FRF_MOTO_MOTO_0、SSI_MODE_SLAVE、BAUD_RATE、 8); MAP_SSIEnable (从器件); SSIAdvModeSet (从器件、SSI_ADV_MODE_READ_WRITE); SSIAdvFrameHoldEnable (从站); }
您好!
听起来很不错、但还有两件事提出来:
此致、
Norbert
您好!
从2)开始:似乎您现在尝试选择要获取数据的电路板、尽管您在第一个帖子中说 SSIFSS 将很常见-您可以通过将单独的引脚配置为 GPIO 引脚并用作 FSS 来实现这一点、 但这将是一场噩梦 -每个板一个引脚、未指定的数字和每个板一个发送/接收功能。 如果您使用138等外部解码器和额外的3个引脚来选择电路板、则要简单得多、FSS 可以是自动的 GPIO、也可以是单个发送/接收功能。
此外、在这种情况下、更灵活的连接将是使用 UART、仅使用2个引脚和一个小位软件。 可通过第一个字节作为电路板地址、下一个字节作为数据来完成选择。
根据电路板之间的距离、也可以使用 CAN 接口。