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、
不需要从 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
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 数据。请与我分享一些示例代码以实现该数据。
谢谢、
您好!
我们在进行 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 端仅接收一次。
请回复您的反馈。
此致、