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.

[参考译文] Linux/ADC128S022:将 BeagleBone Black 连接到 TI ADC128S022 ADC

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/783445/linux-adc128s022-interfacing-beaglebone-black-to-ti-adc128s022-adc

器件型号:ADC128S022

工具/软件:Linux

您好!

我已使用 SPI (IOCTL)将 ADC128S022配置为使用 BeagleBone Black、但无法读取 SPI_rxbuffer 中的正确数据。

buf[0]=(channel_num << 3);
buf[1]= 0x00;

Xfer[0].TX_Buf =(无符号长整型) buf;
xfer[0].len = 2;//要写入的命令长度
Xfel[1].rx_buf =(无符号长整型) buf2;
Xfer[1].len = 2;/*要读取的数据长度*/

if (ioctl (file、SPI_IOC_message (2)、&xfer)<0){
perror ("发送 SPI 消息失败");
EXIT (0);

RX_DATA =(((uint16_t) buf2[0]<< 8)|(uint16_t) buf2[1];

我已经使用逻辑分析仪检查了 SPI、它显示了两次生成的16个时钟周期。 但当芯片选择为低电平时、我预计会有16个时钟周期。

有人能告诉我为什么第二次要16个时钟周期??!

此致、

SAMU

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

    请发布您使用的 Linux 版本以及 SPI 相关器件树设置。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    Linux 版本 debian 4.19.06  

    实际上、我们无法在 SPI Rx 缓冲器中获取数据、但在逻辑分析仪中、我们能够看到正确的数据、但在我们的 c 程序中、我们能够获取原始数据是因为时钟? 或 SPI 读取间隔。

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    uint8_t 模式= 1、位= 8、val[2]={0};
    uint32_t speed=2000000;
    如果((file = open (device、O_RDWR))<0){
    perror ("SPI:不能打开设备。");
    返回-1;

    if (ioctl (file、SPI_IOC_WR_MODE、&MODE)=-1){
    perror ("SPI:不能设置 SPI 模式。");
    返回-1;

    if (ioctl (file、SPI_IOC_RD_MODE、&MODE)=1){
    perror ("SPI:无法获得 SPI 模式。");
    返回-1;

    if (ioctl (file、SPI_IOC_WR_bits_per_word、&bits)=-1){
    perror ("SPI:不能为每个字设置位。");
    返回-1;

    if (ioctl (file、SPI_IOC_RD_bits_per_word、&bits)=-1){
    perror ("SPI:不能为每个字获取位。");
    返回-1;

    if (ioctl (file、SPI_IOC_WR_MAX_SPEED_Hz、&SPEED)=1){
    perror ("SPI:不能设置最大速度 Hz");
    返回-1;

    if (ioctl (file、SPI_IOC_RD_MAX_SPEED_Hz、&SPEED)=1){
    perror ("SPI:无法获得最大速度 Hz.");
    返回-1;
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    SAMU、

    TI e2e 论坛不支持 Debian Linux、您应该在 BeagleBone org 社区中咨询。 如果您可以切换到 TI PSDK Arago Linux (链接如下)、我们将为您提供更好的帮助。

    software-dl.ti.com/.../index_FDS.html

    作为调试提示、我建议您:

    转储 AM335x McSPI 寄存器并检查其值是否符合预期
    -检查 AM335x McSPI pinmux 寄存器值、确保某些代码不会覆盖设置
    -使用示波器检查 AM335x McSPI 引脚、确保具有正确的 CS 和 CLK 信号、并且数据来自 mcspi 数据引脚。 CLK 引脚应设置为输入/输出(非仅输出)
    -如果您遇到与 McSPI 模块相关的错误/警告,请检查启动日志

    此致、
    帕维尔