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.
工具/软件:TI-RTOS
大家好、
我们正在开发 ADAS 的 TDA2x 平台。我们使用 TDA2HV 处理器设计了定制板。我们使用 VISION SDK 进行开发。我们使用 LVDS_VIP_multicam_view 用例。 我们希望在我们的用例中使用 SPI 的数据。对于 TI 提供的 utils_Mcspi.c 和 utils_MCspi.h 文件中的 SPI 接口、该文件仅包含 SPI 初始化函数。因此、我们如何写入和读取 SPI 发送和接收缓冲区。
我的查询是、
1) 1)您能否共享我们可以在用例中运行的 SPI 的保存示例代码?
如果您需要我们方面的更多信息、请告诉我。
谢谢、
Parth Modi
您好、Rishabh、
根据您的建议、我了解了 MCSPI 示例代码、并制作了演示代码来测试我们一侧的 MCSPI1。 我运行此代码、 并使所有初始化函数 通过、但代码停留在 GIO_REBLEY (mcspiHandle、(ptr *)&dataparam、NULL、NULL);。 我测量了 SPI 时钟和 SPI_Cs0线路、以确认 SPI 初始化是否正常工作、但不工作。 我无法将任何 SPI 时钟和 cs0线路置为低电平。
我为所有操作调用了 start_spi_sample_new (void)。 我随附了我的代码以供您参考。
我在下面有一些有关这方面的问题、
1) 1)流程中是否存在任何错误?
2) 2)您能否分享您对 使用此代码的建议?
如果您需要我们方面的更多信息、请告诉我。
谢谢、
Parth Modi
您好、Rishabh、
根据您的建议、我检查代码、下面是我的观察结果、
CREAT Steam 函数已调用 Gio_Create()函数。
然后、我们将调用 GIO_Issue、
我们还检查了 MCSPI 处理程序的返回值、该值不为空。
在调试期间、我观察到在主要函数中 、GIO_Issue 会失败、并出现以下错误。
"无法发出空缓冲区以进行流式传输"
我将附上我的调试日志和示例应用程序供您参考。
请提供您的意见以解决 此问题。
谢谢、
Parth Modi
您好 Parth、
我已要求 MCSPI 专家进一步帮助您。
此致、
Rishabh
Prasad、您好!
根据您的建议,我们使用了实用程序功能,但 Utils_dmaInit()失败,并显示错误"utils:dma: utils_dmaInit() for instance 0... Failed (-128)(失败(-128))"。
我们发现 故障重新发生的原因是我们在下面的两个函数中进行了注释。
/*RetVal += BspUtils_memInit();
IF (BSP_Sok!= RetVal)
{
GT_0TRACE (BspAppTrace、GT_ERR、"Error:App MEM Utils Init failed!!!\r\n\r\n);
}
RetVal += BspUtils_prfInit();
IF (BSP_Sok!= RetVal)
{
GT_0TRACE (BspAppTrace、GT_ERR、"Error:App PRF Utils 初始化失败!!!\r\n");
}*/
如果我们尝试取消注释此函数、则在代码编译期间会出现以下错误
程序将不能放入可用的内存中。 带对齐的照射行程放置
“Group_1”大小为0xf816696的部分失败。 可用存储器范围:
IPU1_0_DATA_MEM 大小:0xb00000 未使用:0x70cea 最大孔:0x70cea8
因此、请为我们提供解决此编译错误的可能解决方案。
我们为您添加了源代码、调试日志和配置错误快照、以供参考。
谢谢、
Parth Modi
Prasad、您好!
感谢您的快速响应。
我们找出失败的原因、而这是由于我们对两个函数进行了注释。
/*RetVal += BspUtils_memInit();
IF (BSP_Sok!= RetVal)
{
GT_0TRACE (BspAppTrace、GT_ERR、"Error:App MEM Utils Init failed!!!\r\n\r\n);
}
RetVal += BspUtils_prfInit();
IF (BSP_Sok!= RetVal)
{
GT_0TRACE (BspAppTrace、GT_ERR、"Error:App PRF Utils 初始化失败!!!\r\n");
}*/
如果我们尝试取消注释此函数、则在代码编译期间会出现以下错误
程序将不能放入可用的内存中。 带对齐的照射行程放置
“Group_1”大小为0xf816696的部分失败。 可用存储器范围:
IPU1_0_DATA_MEM 大小:0xb00000 未使用:0x70cea 最大孔:0x70cea8
因此、请为我们提供解决此编译错误的可能解决方案。
我们已附加源代码、调试日志和编译错误快照供您参考。
谢谢、
Parth Modi
您好!
上一帖子是否有更新?
我们正在等待您的答复。
谢谢、
Parth
您好!
上一帖子是否有更新?
我们正在等待您的回复。
谢谢、
Parth
您好 Parth、
不需要从 vsdk 框架调用 BspUtils_functions。
utils_mcspi.c 文件具有用于添加器件的函数、您需要使用 mcspi 实例编号调用 Utils_mcspiInit 函数。
然后调用具有在 Utils_mcspi.c 文件中使用的相同器件名称的 GIO_Create API。
根据您之前的帖子、您遇到了 GIO_Submit RIGHT 问题、您是否检查了出现错误的驱动程序代码?
您现在是否能够接收数据、但数据已损坏?
另外、如果 McSPI 主器件将发送时钟、而从器件必须响应接收到的时钟、那么从器件在主器件启动时钟之前如何发送数据?
此致、
Prasad
Prasad、您好!
感谢您的回复、
到目前为止、我们的 TDA2x SoC 正在从模式下工作。在从模式下、 我们完全从主器件(MOSI)接收数据。但当我们从器件向主器件发送数据时、主器件侧的第一个位(MISO 线路)缺失。我们使用 SPI 模式3 (CPOL = 1且 CPHA = 1)进行通信。
如果我们从 Salve 发送数据129 ((二进制) 1000 0001)、那么我们将接收主端3 (0000 0011)。
我已附上 CRO 屏幕截图供您参考。内部屏幕截图中的黄色线条表示 SCLK、蓝色通道表示 MISO 线条。
我的查询 是、
1) 1)如何解决此数据在主器件侧发生错误的问题?
请建议我们解决此问题的解决方案。
如果您需要我们方面的更多信息、请告诉我。
谢谢、
Parth Modi
您好 Parth、
TDA2 SOC 配置为 McSPI 从模式时、不控制时钟。 它只响应来自外部主器件的时钟。 因此、它在主器件启动时钟之前继续发送该位。
您是如何连接电路板上的从器件的? MOSI、MISO 和时钟的轨道长度是否相同?
此致、
Prasad
Prasad、您好!
我们的轨迹长度如下所示
MOSI 312.61 + 4476.41 = 4789.02密耳
MISO 306.11 + 3208.36 = 3514.47mil
CS# 211.32 + 3103.34 = 3314.66密耳
CLK 248.9 + 3117.13 = 3366.03mil
我们将主器件连接到电平转换器。
Tad2x (从设备)<->levelfel<->MCU (主设备)
我们在调用 GIO_Issue 一次后会遇到 GIO_REW回收 滞留。如果调用此函数2次、则效果会很好(即每次需要调用2次数据问题并回收2次数据)。
我已附上我的代码供您参考。
在 GIO_REACK_背后 要放置什么区域?
我们希望在从主器件接收中断的每个实例上获取 SPI 数据。请与我分享一些示例代码以实现该数据。
谢谢、
Parth、
仅在首次需要2个 GIO_Issue 时、这是为了填入要作为从器件的默认响应发送的数据。
在从机模式下、驱动程序在内部维护要发送的响应的队列。
之后、您可以执行 GIO_REACK_后跟 GIO_Issue。
在随附的代码中、我发现问题仅在启动过程中出现。
您可以参考示例本身、该示例会执行多个 GIO_Issue 和索赔。
此致、
Prasad
您好!
我们在进行 SPI 通信时仍面临问题、因此我想根据您之前的建议在这里澄清几点。
对于 SPI 通信,我们应首先调用 GIO_Issue 两次,然后调用2次 GIO_REACK,这些调用仅用于进行 SPI 初始化,请验证。
执行上述步骤后、实际数据传输将开始、直至目前为止没有有效的数据读取/写入。
现在,在循环中,我们可以为每个数据读取/写入调用 GIO_Issue 和 GIO_Reclance,我是说每个循环中有一个问题/回收,对吧?
请在此澄清我们的理解。
谢谢。
Prasad、您好!
我们一直在努力实施 SPI 通信、但我们很难理解该问题、请阅读下面的说明以了解我们的要求和问题详细信息。
我们使用的是 TDA2XX 板和 Vision SDK 3.1、我们在从模式下运行。
我们的目的是从主器件读取13字节数据(包括校验和)。
请参阅随附的文件了解我们的实现方案、我们使用 GIO_Issue 和 GIO_REACK_API 来接收数据。
为了模拟主设备发送的数据、我们使用了"Hi-wave"工具。
下面是从 HI-wave 工具更改数据时发生的情况。
在 SPI 初始化之后、首先我们要更改 HI 波工具中的数据以模拟主器件到从器件的通信、使用此仿真、从器件应该从主器件接收13个字节、但从器件侧没有接收到任何数据。
2、现在再次将数据从高波更改为不同的值、我们将接收到两个13字节的帧、其中第一个帧不正确、而第二个帧具有有效数据。
3.第三次更改来自 HI 波的数据时,我们在从端接收到13个字节,这是垃圾值。
以上三点在后续更改中不断重复。
请查看我们的实施、并让我们知道、只有当主器件发送任何数据时、我们才能在单次传输中从主器件接收正确的数据。
您可以在附加的文件中引用函数"getSpiData"以获取实际通信代码、这里是我们在该文件中使用的一些常量。
/用于 SPI 实现的宏/
/缓冲区大小/
#define BUFLEN (16 * 1)
/使用 L2缓存的缓冲区对齐/
#define BUFALIGN 128
/迭代次数/
#define iteration_CNT 100
/要发布和回收的数字 bufs /
#define NUM_BUFS 2.
长期以来、我们一直在努力处理 SPI、请优先回复、因为我们有一定的紧迫性。
此致、
e2e.ti.com/.../chains_5F00_lvdsVipMultiCamMirrorReplacement.c
您好、Rajesh、
setSpiReadyHigh 在您的代码中设置了一些 GPIO 引脚、它用于什么?
您可以在 while 之前填充缓冲区、然后在 while 循环中、在循环开始时添加1个回收、在循环结束时添加1个问题、直到您希望从外部主控方接收数据。
此致、
Prasad
您好!
setSpiReadyHigh 将引脚设置为高电平/低电平、以向 MCD 发送 SoC 已准备好发送/接收数据的指示。
正如我之前所说、我们希望发送/接收13字节数据、经过一些工作后、我们发现将其设置为16字节并将缓冲区对齐和缓冲区大小设置为16对适用于我们在一个方向(MCU -> SoC)但反向(SOC -> MCU) 对于每两个从 Sock 发送的数据、在 MCU 端仅接收一次。
请回复您的反馈。
此致、