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.

[参考译文] RTOS/XTCIEVMK2LX:通过 FMC 使用 SPI 通信发送数据

Guru**** 1178510 points
Other Parts Discussed in Thread: ADC34J22, 66AK2L06, LMK04828, RFSDK, DAC38J84, ADC32RF80, BIOSLINUXMCSDK, TIDEP0081
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/594320/rtos-xtcievmk2lx-send-data-using-spi-communication-through-fmc

器件型号:XTCIEVMK2LX

工具/软件:TI-RTOS

各位专家、您好。

我仍在努力使 ADC 板(DEV-ADC34J22)与 XTCIEVMK2LX 配合使用。 (请参阅 。)

根据 ADC 板的用户指南、它有两个可通过 SPI 接口配置的芯 片:ADC34J22和 LMK04828B。

该板通过 FMC1连接到 XTCIEVMK2LX、但不直接通过适配器板(FMC 到 HSMC)连接、因为 ADC 板仅具有 HSMC 连接器。

根据数据表、XTCIEVMK2LX 上似乎有三个 SPI 接口、SPI1似乎是连接到 FMC 的接口。

我不知道如何选择要在 ADC 板上配置的芯片、但无论如何、我决定使用 C 语言的 SPI 通信通过 FMC 将默认数据(在用户指南中提供)发送到板

我找到了 SPI 的驱动程序库、并通过运行将一些数据写入 NOR 闪存的测试应用程序来确认它运行良好。 参考示例代码、我编写了自己的代码、如下所示(省略了一些代码):

void Board_initSPI (void)
{
board_initCfg boardCfg;
SPI_V0_HWAttrs SPI_cfg;

/*获取默认的 SPI 初始化配置*/
SPI_socGetInitCfg (SPI_PORT、&SPI_cfg);// SPI_PORT = 1.

/*如有必要,修改默认 SPI 配置*/
spi_cfg.intNum = 10;//将其设置为避免'Hwi already defined'错误。

/*设置默认的 SPI 初始化配置*/
SPI_socSetInitCfg (SPI_PORT、&SPI_cfg);

boardCfg = Board_init_PINMUX_CONFIG |
Board_init_module_clock |
Board_init_uart_stdio;

board_init (boardCfg);
}

void send_config (UArg0、UArgarg1)
{
SPI_Handle spiHandle;
SPI_Params spiParams;
SPI_Transaction spiTransactionAdc;
SPI_Transaction spiTransactionLmk;

SPI_Params_init (&spiParams);
spiParams.transferTimeout = 10;
spiHandle = SPI_open (SPI_PORT、&spiParams);

if (!spiHandle)
{
System_printf ("SPI_open failed.\n");
}
否则
{
System_printf ("SPI_open SUCCES.n");
}

SpiTranstxAddc.count =默认值(



1nF)

;SpiTransactionData =




默认值(1nF);SpiTransactionTransactionf = nF (1nF);SpiTransactionTransactionf =默认值(1nF = nF);

if (!spi_transfer (spiHandle、&spiTransactionLmk)
){
System_printf ("发送 LMK 默认数据失败。\n");
}

spi_close (spiHandle);

BIOS_exit (0);
}

/*
=== main ====
*/
int main (void)
{
System_atexit (AtExit);

System_printf ("正在进入 Board_initSPI ()...\n");
Board_initSPI();
System_printf ("正在退出 Board_initSPI ()...\n");

system_printf ("正在输入 SPI_init ()...\n");
spi_init();
system_printf ("正在退出 SPI_init ()...\n");

System_printf ("正在进入 BIOS...\n");
BIOS_start();

return (0);
}

void AtExit (int stat)
{
System_printf ("正在退出 BIOS...");

return;
} 

cfg 文件如下所示:

var 设置= xdc.useModule('ti.board.Settings');
var BIOS = xdc.useModule('ti.sysbios.BIOS');
var ti_drv_spi_Settings = xdc.useModule('ti.drv.spi.Settings');
var ti_drv_UART_Settings = xdc.useModule('ti.drv.uart.Settings');
var ti_osal_Settings = xdc.useModule('ti.osal.Settings');
var ti_CSL_Settings = xdc.useModule('ti.csl.Settings');
var Task = xdc.useModule('ti.sysbios.knl.Task');
var System = xdc.useModule('xdc.runtime.System');
var SysStd = xdc.useModule('xdc.runtime.SysStd');
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
var 内存= xdc.useModule('xdc.runtime.Memory');
var HeapBuf = xdc.useModule('ti.sysbios.heaps.HeapBuf');
System.SupportProxy = SysStd;
var CpIntc = xdc.useModule('ti.sysbios.family.c66.tci66xx.CpIntc');
Settings.boardName ="evmK2L";
ti_drv_SPI_Settings.socType ="K2L";
ti_drv_UART_Settings.socType ="K2L";
ti_osal_Settings.osType ="tirtos";
TI_osal_Settings.socType ="K2L";
ti_csl_Settings.deviceType ="K2L";
var task0Params = new Task.Params ();
task0Params.instance.name ="task0";
task0Params.STACKSIZE = 4096;
Program.global.task0 = Task.create ("&send_config"、task0Params);
Task.numPriorities = 4;
var heapMem0Params = new HeapMem.Params ();
heapMem0Params.instance.name ="heapMem0";
heapMem0Params.size = 204800;
Program.global.heapMem0 = HeapMem.create (heapMem0Params);
Memory.defaultHeapInstance = Program.global.heapMem0; 

构建和启动代码没有问题、但当我单击 CCS 上的"Resume"按钮时、代码将挂起。 调试探针的状态显示"Running"。  输出如下:

正在输入 Board_initSPI()...
正在退出 Board_initSPI()……
正在输入 SPI_init()……
正在退出 SPI_init()……
正在进入 BIOS...
SPI_open 成功。

 当尝试 SPI_TRANSF()时,程序似乎挂起。

实际上、我不确定这是否是在 ADC 板上配置芯片的正确方法。 如果我的行为完全错误、请告诉我正确的方法。 最终目标是以编程方式从 ADC 板获取数据。 我仍然不确定是否可以使用硬件配置进行配置、但无论如何、我认为必须先配置 ADC 板、然后才能使用射频 SDK 工具进行访问。

非常感谢!

Huioon

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

    我已在内部升级此主题。 反馈将发布在此处。

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

    e2e.ti.com/.../LAMARR_5F00_FMC_5F00_MAPPING.xlsHello、

    在 EVM 的 FMC 连接器上、有两个 SPI 连接。  由于有2个 FMC 连接器、因此有2个 SPI 实例直接连接到66AK2L06/TCI6630K2L SOC。  在 FMC 连接器上、SPI_XXX_LMK 由 FPGA 控制。  SPI_XXXX 通过 SOC 进行控制。  软件控制示例仅适用于使用两个 FMC 连接器的 H8。  要获得特定的 FPGA 控制路由、您可以修改 FPGA 以在第一个 FMC 上使用 GPIO 位置。  您需要联系 EVM 提供商 eInfochips、获取 Xilinx FPGA 源代码的副本、并通过 DSP 编程项目在一个 FMC 连接器上使用两个 SOC SPI 端口。

    注意:通常使用 RFSDK、SPI_XXXX 用于控制 AFE750x EVM 上的 AFE750x 器件。  SPI_XXX_LMK 用于控制 AFE750x EVM 上的 LM04828器件。  没有其他提供的 SPI 控制软件示例。  RFSDK 具有一个 Linux ARM 驱动程序、用于通过 SOC SPI 进行 SPI 通信。  FPGA 版本具有固定的上电时间、可为 LMK04828进行 SPI 编程。

    我包含了一个 IO 表、该表从 eInfochips 原理图中提取出来。

    此致

    Joe Quintal

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

    你好、Joe。

    感谢您的详细回答! 不过、听起来我想做的几乎是不可能实现的。 那么、您能否建议任何其他方便、简单的方法来实现我的最终目标、即通过 ADC 以编程方式在 XTCIEVMK2LX 上获取转换的数据? 这与我最近在该论坛上发布的另一个问题(链接)相关。 我想从 ADC 获取数据并在 XTCIEVMK2LX 上进行分析、以进行高速数据传输和分析。 数据大小足够大、实时分析非常重要、因此我需要/希望使用 DSP EVM。 请问我是否可以使用 ADC34J22EVM 实现这个目标? 如果是、我可能希望购买它。

    非常感谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    在 TI 的66aK2L06网站上、查找有关射频接收器实际输入-复数输出和具有复数输出的 IF DAC 的 TI 设计4的参考。

    设计4 - www.ti.com/.../tidep0081 - ADC32RF8x 系列、使用 JESD 通道0和1、同步通道0
    DAC38J84系列、使用 JESD 通道0和1、同步通道0
    DLC 卡、(要使 Tx 和 Rx 在两个 FMC 连接器之间拆分、需要 DLC 卡)
    注意:要仅使用66AK2L06和 ADC、或66AK2L06和 DAC、则不需要使用 DLC 进行计时
    提供的所有信息

    您可以申请 RFSDK 软件 MCSDK 3147软件。 您可以安装这些器件、仅使用66AK2L06 EVM、您可以控制 DFE、JESD
    通过 RFSDK 提供特定示例。 您需要设计4、JESD 环回。 从上述设计4链接中的工具和软件文件夹。

    使用66AK2L06演示 JESD ADC 接收器的最简单路径
    获取 ADC32RF80 EVM -这与参考设计的使用相匹配、只要 ADC JESD 输出在提供相同的 IQ 输出、您就可以使用不同的 RF8x
    ADC 抽取输出 Iq - 245.76Msps 复数、在串行器/解串器通道0和1上、串行器/解串器速率4.9152Gbps、

    ADC 抽取输出 Iq - 368.64Msps 复合数据、在串行器/解串器通道0和1之间、串行器/解串器速率为7.3728Gbps

    应仅提供有关 ADC + 66AK2L06的说明、否则您还必须申请 DLC 卡

    在相关工具和软件下、您需要申请 MCSDK 3147 BIOSLINUXMCSDK 和 RFSDK。
    您需要对66AK2L06进行编程。

    对于软件、只有一个设计4示例、使用 JESD 通道环回、您可以使用数字环回来展示 Tx -> Rx 演示
    ADC 卡的情况下运行。

    当您获得 ADC EVM 时、需要为 ADC 提供射频时钟。 您将需要一些射频输入、通常是射频本地振荡器 LO 源。 在演示说明中、有一些具体的测量示例、用于通过 USB 将 ADC GUI 用于 PC、以及运行与 RFSDK GUI 的终端或 TCPIP 连接来控制无线电。

    尽管这比您的请求更复杂、但它是一个在线示例并已通过测试的示例。
    ->频谱分析仪
    本地振荡器射频源->射频输出->功率分离器-> 32RF80ADC EVM <--- > 66AK2L06 EVM
    TestPC <- USB -> TestPC <- USB ->串行终端 Arm0、XDS200
    <- 1G 以太网-> Ether0

    请下载用户指南以查看此内容。

    与采用 JESD204B 传输的实际 ADC 相关、66ak2l06 - www.ti.com/.../tidub89.pdf
    设计2使用14x250 ADC、这是一个单个实数 ADC、

    与 ADC34J22 EVM 相关的是最接近的 TI 设计 Design5、该设计由意大利的第三方开发商 Azcom 完成。
    在本例中、它是一个实际的 ADC、即4个 Rx 通道。

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

    你好、Joe。

    此设计是否为5?: http://www.ti.com/tool/TIDEP0034

    很抱歉 、在66AK2L06页面的 TI Designs 部分下的列表中找不到任何数字。 实际上、我甚至不知道为什么您也会将 TIDEP0081称为"设计4 "。 )

    总之、66AK2L06的 TI Designs 部分下有三种设计:

    -使用 DSP+ARM SoC 的优化雷达系统参考设计
    -使用66AK2L06 JESD204B 连接 ADC32RF80的宽带接收器参考设计
    - 66AK2L06 DSP+ARM 处理器通过 JESD204B 连接到宽带 ADC 和 DAC

    您将第二个表示为设计4、第一个表示为设计2、因此我猜第三个表示为设计5。 我是对的吗?

    无论如何、我现在正在阅读其参考指南(tidu946a.pdf)。 我想尝试  在没有 DLC 卡的情况下将 ADC34J22EVM 直接连接到 XTCIEVMK2LX。 我可以这么做吗?

    非常感谢!