主题中讨论的其他器件:LMX2595
工具/软件:
您好支持团队、
要开发 SPI 工程、我应该从哪个示例工程开始? 还是应该从空示例工程开始?
我还找到 SPI 和 QSPI。 我应该选择哪一个?
此致、
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 工程、我应该从哪个示例工程开始? 还是应该从空示例工程开始?
我还找到 SPI 和 QSPI。 我应该选择哪一个?
此致、
您好 Lin、
您可以使用启动 SPI 工程
C:\ti\mcu_plus_sdk_am273x_09_02_00_60\examples\drivers\mibspi\mibspi_loopback 或
C:\ti\mcu_plus_sdk_am273x_09_02_00_60\examples\drivers\mibspi\mibspi_loopback_dma、具体取决于您要使用的模式:假设您要使用 SPI 来传输数据、则使用 CPU 复制或 DMA 复制。
QSPI 用于闪存读取/写入。
此致、
Ming
尊敬的 Ming:
非常感谢您的答复。 我很高兴你对我的新职位负责。
mibspi 与标准 SPI 有何区别? 我可以将 mibspi 设置为标准 SPI 吗?
此外、我还导入并构建了示例工程 mibspi_loopback_r5fss0-0_nortos。 现在、我计划修改 mibspi、以使用标准 SPI 连接外部器件。 将 AM273x 设置为主 SPI 模式、并将物理引脚分配给 EVM 接头。 我该怎么做?
我计划从.syscfg 文件开始。 这是一个很好的起点吗? 如果是、我该如何操作? 您能否提供屏幕截图的一些详细说明?
感谢您的帮助和支持。
此致、
LIN
您好 Lin、
多缓冲串行外设接口模块 (MibSPI) 是 TI 版本的 SPI。 它有两种模式:

多缓冲模式和兼容模式。 兼容模式与 SPI 相同。
是的。 您应该从 示例工程 mibspi_loopback_r5fss0-0_nortos 的 example.syscfg 文件开始:

如您所见、您将需要配置 SPI 接口、如 SPI 频率、3 或 4 引脚模式、SPI CLK、MISO、MOSI 和 CS 引脚、主或从器件等
然后在程序 mibspi_loopback.c 中,你需要注释掉对 MIBSPI_enableLoopback () 的调用,因为它将启用环回模式(从 TX 出来的任何东西都将进入 RX )。
此致、
Ming
尊敬的 Ming:
感谢您的指示。 我正在处理 example.syscfg。 我有两个问题。
-我可以在 example.syscfg 中禁用环回模式吗? 或者只能在代码中执行。
-对于“引脚分配“、当前设置为:
具有上拉电阻的 MIBSPI CLK 引脚 (MSS_MIBSPIA_CLK) PAD_DJ/G19
具有上拉电阻的 MIBSPI MISO 引脚 (MSS_MIBSPIA_MISO) PAD_DI/G17
具有上拉电阻的 MIBSPI MOSI 引脚 (MSS_MIBSPIA_MOSI) PAD_DH/H18
CS 引脚 PAD_DK/F19 无上拉电阻
如何测量/测试 EVM 电路板上的这 4 个引脚信号?
此致、
LIN
您好 Lin、
请检查以下 URL:
您也可以在 https://www.ti.com/lit/zip/sprr504 中找到设计文件包。
此致、
Ming
尊敬的 Ming:
仔细阅读 EVM 用户指南、尤其是第 2.2.9 节 SPI 接口后、我发现有四种 SPI 选择:
- MSS_SPIA 连接到 FTDI USB 端口 (J10)。 但是、我不确定如何测试 J10 上 MSS_SPIA 的 4 引脚信号。
-通过将 S2 设置为 PMIC_SPI 位置、可以对 MSS_SPIB 进行多路复用并连接到 J16。 此外、R5、R61、R167 和 R176 还需要组装 0 Ω 的电阻(通过检查 EVM 的 S2 器件和 BOM)。 您认为 MSS_SPIB 到 J16 是不错的选择吗? 如果是、我需要在 EVM 板上添加 4 个电阻器、并将 example.syscfg 文件修改为 MSS_SPIB。 请提供您的意见。
- RCSS_SPIA 路由到 J1(60 引脚连接器),很难获得 SPI 信号。
- RCSS_SPIB 路由到 J11(60 引脚连接器),很难获得 SPI 信号。
在我继续之前、您能提供您的建议吗? 如果您能解释您的选择、那将会很棒。
此致、
LIN
尊敬的 Ming:
EVM 板已修改、可支持 J16 上的 MSS_SPIB。 现在、我要修改示例代码以支持 MSS_SPIB 和我们的从设备。
这里我有关于代码调试和运行的问题。
通过右键点击工程名称并选择“Build Project“来编译工程后、如何调试或运行工程代码? 右键点击工程名称并选择 Debug As /1 Code Composer Debug Session? 或其他方式吗?
感谢您的分享和建议。
此致、
LIN
尊敬的 Ming:
由于我们计划通过 SPI 将 AM273x 与多个器件连接、因此我想使用 GPIO 引脚作为不同器件的 CS。 问题如下。
-当我检查 EVM 板的原理图时、MSS_GPIO_2 连接到 LED D6。 但是、在 example.syscfg 文件中、将使用 GPIO Pin (MSS_GPIO26)。 它们是否相互匹配? 如何在 example.syscfg 文件中选择焊盘编号?
-在 EVM 板上哪里可以找到其他 GPIO 引脚测试点?
感谢您的帮助。
此致、
LIN
您好 Lin、
在这种情况下、您应该在 3 引脚模式(在 example.syscfg 中)下使用 MIBSPI
应重点关注不会在 J7 上使用的引脚(60 引脚连接器)。 例如、DBG_SPI_CS0 (MSS_SPIB_CS0 -> MSS_MIBSPIB_CS0 -> D19 模式 0 -> MSS_GPIO_4、根据 AM273x 数据表中的表 5-1)。 D19 可用于其中一个 CS 引脚。
另一个示例是 RCSS_SPIB_CS0 (RCSS_MIBSPIB_CS0 -> U17 模式 0 -> RCSS_GPIO_40 、根据 AM273x 数据表中的表 5-1)。 U17 可用于其中一个 CS 引脚。
此致、
Ming
尊敬的 Ming:
修改 mibspi_loopback.c 文件时、代码的以下部分:
uint8_t const reg_addr = 0x1A;
uint16_t const reg_data = 0xAA55;
uint32_t lmx_frame =(0U << 23)|(reg_addr << 16)| reg_data;//来自 LMX2595 的 24 位帧
uint16_t txBuf[2];
uint16_t rxBuf[2]={0};
txBuf[0]=(lmx_frame >> 8)& 0xFFFF;//高 16 位
txBuf[1]=(lmx_frame & 0xFF)<< 8;//与 MSB 对齐的低 8 位
构建工程时、收到以下错误和警告消息:
../mibspi_loopback.c:71:1:警告:缺少类型说明符、默认为“int";“;ISO C99 及更高版本不支持隐式 int [-Wimplict-int]
txBuf[0]=(lmx_frame >> 8)& 0xFFFF;//高 16 位
^μ s
int
../mibspi_loopback.c:71:1:错误:使用不同类型重新定义“txBuf":“:“Int[0]"与“与“uint16_t[2]"(“(又(又名“unsigned short[2]“)
.../mibspi_loopback.c:68:10:注意:这里有先前的定义
uint16_t txBuf[2];
^μ s
../mibspi_loopback.c:72:1:警告:缺少类型说明符、默认为“int";“;ISO C99 及更高版本不支持隐式 int [-Wimplict-int]
txBuf[1]=(lmx_frame & 0xFF)<< 8;//与 MSB 对齐的低 8 位
^μ s
int
../mibspi_loopback.c:72:1:错误:使用不同类型重新定义“txBuf":“:“Int[1]"与“与“uint16_t[2]"(“(又(又名“unsigned short[2]“)
.../mibspi_loopback.c:68:10:注意:这里有先前的定义
uint16_t txBuf[2];
^μ s
您是否对这些错误和警告有任何提示和建议? 屏幕截图如下所示:(抱歉,似乎我无法在此处粘贴任何屏幕短语)
期待您的回复。
此致、
LIN
尊敬的 Ming:
我可以修复 txBuf 定义了两次的错误的任何建议(第 71 行和第 68 行)。 一个作为 int、另一个作为 uint16_t 我尝试了许多方法来键入 cast 和其他方法,但没有成功。
由于我们的连接器件需要 24 位帧模式、因此我要根据输入寄存器地址和寄存器数据动态创建 2 个 16 位数据。
uint16_t txBuf[2];
txBuf[0]=(lmx_frame >> 8) 且 0xFFFF;
txBuf[1]=(lmx_frame & 0xFF)<< 8;
如何避免重新定义 txBuf?
此致、
LIN
谢谢 Ming、
如果将部分代码放在函数之外、则会收到相同的错误消息。 但是、正如我在前一条消息中所说的、如果我将这些代码部分移到函数中、它会很好地工作。 现在我的代码如下:FYI。
#include
#include
#include
#include
#include
#include “ti_drivers_config.h"</s>“
#include “ti_drivers_open_close.h"</s>“
#include “ti_board_open_close.h"</s>“
/*
uint32_t lmx_frame = 0x1AAA55;
uint16_t txBuf[2]={0x1AAA、0x5500};
uint16_t rxBuf[2]={ 0 };
*/
/*
uint8_t const reg_addr = 0x1A;// uint8_t const、无需
uint16_t const reg_data = 0xAA55;// uint16_t const、无需
uint32_t lmx_frame =(0U << 23)|(reg_addr << 16)| reg_data;//来自 LMX2595 的 24 位帧
uint16_t txBuf[2]={0};
uint16_t rxBuf[2]={0};
txBuf[0]=(uint16_t)(lmx_frame >> 8)& 0xFFFF;//高 16 位
txBuf[1]=(uint16_t)(lmx_frame & 0xFF)<< 8;//与 MSB 对齐的低 8 位
*/
void mibspi_loopback_main (void * args)
{
int32_t transferOK;
MIBSPI_Transaction spiTransaction;
uint8_t reg_addr = 0x1A;// uint8_t const、无需
uint16_t reg_data = 0xAA55;// uint16_t const、无需
uint32_t lmx_frame =(0U << 23)|(reg_addr << 16)| reg_data;//来自 LMX2595 的 24 位帧
uint16_t txBuf[2]={0};
uint16_t rxBuf[2]={0};
txBuf[0]=(lmx_frame >> 8)& 0xFFFF;//高 16 位
txBuf[1]=(lmx_frame & 0xFF)<< 8;//与 MSB 对齐的低 8 位
drivers_open();
BOARD_DRIVERSOpen ();
DebugP_log(“[MIBSPI] MSS_SPIB_J16 已启动...\r\n“);
/*启动传输*/
spiTransaction.count = 2;// 2 个 24 位帧的 16 位数据
spiTransaction.txBuf =(void *) txBuf;
spiTransaction.rxBuf =(void *) rxBuf;
spiTransaction.peripheralIndex = 0U;
spiTransaction.arg = NULL;
//检查句柄是否创建良好
DebugP_log(“SPIB 句柄地址:0x%x\r\n“、gMibspiHandle[MSS_SPIB_J16]);
//开始 SPI 传输
transferOK = MIBSPI_TRANSFER (gMibspiHandle[MSS_SPIB_J16]、&spiTransaction);
//检查传输结果
DebugP_log(“transferOK =%d、spiTransaction.status =%d\r\n“、transferOK、spiTransaction.status);
if((SystemP_Success != transferOK)||
(MIBSPI_TRANSFER_COMPLETED!= spiTransaction.status)
{
DebugP_log(“SPI 传输失败!\r\n“);
DebugP_ASSERT(FALSE );/* MIBSPI 传输失败!! */
}
暴露
{
DebugP_log(“SPI 传输成功!\r\n“);
}
Board_driversClose();
drivers_close();
返回;
}
在检查和验证 J16 接头上的 SPI 信号之前、我有一些问题。
example.syscfg 文件中的 MIBSPI 设置如下所示:
example.syscfg / TI 驱动程序 (20)/MIBSPI 2/4
名称 MSS_SPIB_J16
运行模式控制器
时钟频率 (Hz) 5000000
发送结束延迟 0x0
芯片选择有效延迟 0x0
传输之间的延迟 0x0
数据大小 16
帧格式模式 0 (POL0 PHA0)
传输模式阻塞
启用多 ICount 支持未选中
传输超时 0xFFFFFFFF
使用 CS 实现引脚模式 4 引脚模式
移位格式 MSB 优先移出
启用未选中的 DMA
转移组数 1.
显示高级配置未选中
XBAR 实例 MSS_MIBSPIB
SPI 实例 MSS_MIBSPIB
信号引脚向上/向下
MIBSPI CLK 引脚 (MSS_MIBSPIB_CLK) PAD_CV/V19 上拉
MIBSPI MISO 引脚 (MSS_MIBSPIB_MISO) PAD_CU/V18 上拉
MIBSPI MOSI 引脚 (MSS_MIBSPIB_MOSI) PAD_CT/U19 上拉
MIBSPI 通道配置
MIBSPI 通道配置 0
外设芯片选择 0
DMA 请求行 0
引脚
CS 引脚 PAD_CX/W18 无上拉电阻
对于 4 个 SPI 信号、还有一些其他的焊盘选择。 哪一个正确连接到 J16 插头引脚? 或者、它们中的任何一个都是正确的?
对于上述设置和代码、如何验证 EVM 的 J16 上的 SPI 信号?
请参考详细说明。
此致、
LIN
尊敬的 Ming:
为了供参考、我完成了 EVM 的 J16 上的 SPI 信号测试。
只有一组焊盘映射可按如下方式工作:
MIBSPI CLK 引脚 (MSS_MIBSPIB_CLK) PAD_AJ/D18
MIBSPI MISO 引脚 (MSS_MIBSPIB_MISO) PAD_AI/C19
MIBSPI MOSI 引脚 (MSS_MIBSPIB_MOSI) PAD_AH/C18
CS 引脚 PAD_AA/E18
J16 R5 引脚上的 CS 信号非常不是干净的低电平方波信号。 只能捕获一组信号、MOSI 数据仅与较高的 16 位数据匹配。 无法在示波器上显示较低的 16 位数据。
您对上述结果有何评论或解释?
此致、
LIN
您好 Lin、
您可能需要注意以下两点:
1. CS0 应为 D19、F2 或 U17。 E18 用于 CS1。 如果您确实要使用 CS1、则“Peripheral Chip-Select“(外设芯片选择)必须设置为 1 而非 0(默认值)
2. Saleae 捕获电压 (1.8V/3.3V) 必须与用于 MIBSPI 的电压 (1.8V/3.3V) 相匹配
此致、
Ming
尊敬的 Ming:
到目前为止、MSS_SPIB 4 引脚模式工作良好、我已使用示波器检查信号来进行验证。 非常感谢您的帮助和支持。
现在我想重点介绍 MSS_SPIB 3 引脚模式+ GPIO 引脚用作 CS 功能。
您能否针对一个示例引脚提供更详细的说明: DBG_SPI_CS0 (MSS_SPIB_CS0 -> MSS_MIBSPIB_CS0 -> D19 模式 0 -> MSS_GPIO_4(根据 AM273x 数据表中的表 5-1)。? 查看数据表的表 5-1 时、我仍然不能确定应该做什么。
感谢您的帮助和时间。
此致、
LIN
您好 Lin、
根据 AM273x 数据表、D19 可用作 MSS_MIBSPIB_CS0(模式 1)或 MSS_GPIO_4(模式 0)。 当您使用 SPI 4 引脚模式时、syscfg 将 DBG_SPI_CS0 (D19) 配置为模式 1。 使用 SPI 3 引脚模式时、syscfg 根本不配置 DBG_SPI_CS0 (D19)。 由您在 syscfg 中的 GPIO 下进行配置(必须将 D19 配置为 GPIO 引脚输出、模式 0 等)。 当 SPI 准备好在软件中发送/接收数据时、您还负责将 D19 设置为高电平。
有关如何配置和使用 GPIO 引脚的信息、请参阅 MCU+ SDK 中的 GPIO 示例: C:\ti\mcu_plus_sdk_am273x_09_02_00_60\examples\drivers\gpio\gpio_led_blink
此致、
Ming
尊敬的 Ming:
这是我的最新状态。
我做了以下修改:
1).syscfg
a) 引脚模式 3 引脚模式
b) 未选中 Advanced Config 下的 CS Hold Enable
C) 取消选中 Show Advanced Config(显示高级配置)
d) 添加 GPIO 设置
名称 GPIO_LMX_CS
引脚方向输出
触发器类型无
触发电平低
开漏禁用
XBAR 实例 MSS_GPIO
GPIO 外设 MSS_GPIO0
信号引脚上拉/下拉
GPIO 引脚 (MSS_GPIO4) PAD_AK/D19 无拉电阻
2) mibspi_loopback.c
a)#include
b) uint32_t gpioBaseAddr、pinNum;
c)/*翻译后获取地址*/
gpioBaseAddr =(uint32_t) AddrTranslateP_getLocalAddr (GPIO_LMX_CS_BASE_ADDR);
pinNum = GPIO_LMX_CS_PIN;
GPIO_setDirMode (gpioBaseAddr、pinNum、GPIO_LMX_CS_DIR);
d) GPIO_pinWriteLow (gpioBaseAddr、pinNum);//将 CS 置为有效(低电平有效)
transferOK = MIBSPI_TRANSFER (gMibspiHandle[MSS_SPIB_J16]、&spiTransaction);
GPIO_pinWriteHigh (gpioBaseAddr、pinNum);//将 CS 置为无效
构建并运行最新代码后、我可以从 EVM 上 J16 的引脚获取 SPI CLK 和 SPI MOSI 信号、但无法从 EVM 上 J7 的引脚 7 获取 GPIO CS 信号。 但是、我可以在 J16 的 CS0 引脚上获得 GPIO CS 信号。
与以前一样、S2 设置为 PMIC_SPI 位置、没有更改。
如果我将 S2 更改为 DBG_SPI 位置、J16 上没有 CLK 和 MOSI、J7 的引脚 7 上仍然没有 GPIO CS 信号。
我的上述所有结果是否正确? 从 J7 的引脚 7 获取 GPIO CS 信号时是否发生了任何事情?
您能帮我检查一下吗? 或者您能否分享正确的设置?
此致、
LIN
您好 Lin、
测试结果与您的设置匹配。 J16 用于 PMIC_SPI 信号、S2 应位于 PMIC SPI 上。 D19 模式 0 是 MSS_GPIO_4 -> PMIC_SPI_CS0。
但是、当您将 S2 切换到 DBG_SPI 时、J7 DBG_SPI_CS0 的引脚 7 应已连接到 MSS_SPIB_CS0 --> MSS_MIBSPIB_CS0 --> D19、因此在启用 CS 时您应该看到它被拉低。
此致、
Ming。
尊敬的 Ming:
非常感谢您提出后续问题。
我订购了 Zx100-QTH030-Samtec ST 分线适配器用于测试、它会送达我的下一个星期一办公室。 我刚刚要求技术人员从 J7 的引脚 7 焊接一根测试线。 我用 RIGOL MSO5104 示波器捕捉信号 Not Saleae Logic Pro。
否、我仍然使用 J24 的引脚 29 和 26 作为 GND、而不是 J7 的引脚 8。 我是否必须使用引脚 8 作为 GND 来捕获 J7 引脚 7 上的信号?
此致、
LIN