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.

[参考译文] LMK04821:读取寄存器

Guru**** 2526700 points
Other Parts Discussed in Thread: LMK04821

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

https://e2e.ti.com/support/clock-timing-group/clock-and-timing/f/clock-timing-forum/1079570/lmk04821-read-register

部件号:LMK04821

根据标准的3行 SPI 读取方法,我尝试读取 LMK04821的版本值0x006,但在发送0x8006后,最后8个 CLKS 没有收到我需要的 SDI 数据。 我已经验证了寄存器是否可以成功写入(打开时钟后,将0x01发现时钟关闭发送至0x002)。 系统启动后,我尝试不初始化时钟,然后执行读取操作,但它不起作用。 读取操作是否与寄存器配置相关? 下面是我读取寄存器代码的用户层。

为了简化我的问题:如何读取寄存器值,忽略以前可能的寄存器配置操作对其的影响?

/* set spi mode, bits and speed */
SPI_set_mode(MODE_0);
SPI_set_bits(8_BITS);
SPI_set_speed(1000000);

/* data to be send */
unsigned char tx_buf[] = {0x80, 0x06, 0x00};
unsigned char rx_buf[3] = {0, };
struct spi_ioc_transfer tr = {
		.tx_buf = (unsigned long)tx_buf,
		.rx_buf = (unsigned long)rx_buf,
		.len = 3,
		.delay_usecs = 0
	};
	
ioctl(fd, SPI_IOC_MESSAGE(1), &tr);

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

    首先,我在上面的代码片段中没有发现您的 SPI 交易机制有什么问题。 这对我来说是正确的。

     您的 SPI 控制器是否支持3线交易?

    LMK04821支持3线回读和4线回读,并且可以同时支持两者。

    对于3线模式:

    • 3线模式由 R0中的 SPI_3Wire_DIS 字段控制。 如果 SPI_3Wire_DIS=1,则不会发生3线事务。 如果 SPI_3Wire_DIS=0,则 LMK04821上的 SDIO 针脚将在 SPI 事务的第16个下降边缘从输入转至输出。
    • SDIO_RDBK_TYPE 字段控制 三线 SPI 是使用漏极开路还是推挽信号。 POR 默认为漏极开路(1),因此除非 SDIO 上有一个上拉电阻,否则输出上不会看到任何信号。 如果 SDIO_RDBK_TYPE=0,SDIO 针脚将设置为推挽模式。 在推挽模式下,请小心数据线上没有总线冲突。

    对于4线模式:

    • 必须为 SPI 回读重新利用其中一个 GPIO 引脚(STATUS_LDx,CLKIN_SELx,RESET),方法是将该 GPIO 的适当_type 寄存器设置为 SPI 回读,并将输出样式设置为 一个漏极开路或推挽选项。 这会将 GPIO 转换为设备的 SDO 引脚。
    • 如果出于某种原因需要,可以将多个引脚配置为 SPI SDO。
    • 如果出于某种原因需要启用4线模式,也可以同时启用3线模式。

    仔细检查您是否按照自己的需要配置了3线或4线,如果您在重新读取方面仍遇到困难,我们可以进一步排除故障。

    此致,

    德里克·佩恩

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

    您好,

    我在手册中找到了此寄存器,它是否是决定我是否可以读取寄存器的配置项? 目前我已将0x149设置为0x42。 此配置是否允许我配置寄存器,然后运行下一个命令查询其值? 我已启用第三行 SPI

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

    如果 SDIO_RDBK_TYPE=1 (与您当前的0x149设置相同)和 SPI_3Wire_DIS=0 (您没有提到地址0x0的寄存器设置,但 SPI_3Wire_DIS=0 (即已启用)是默认设置),SDIO 针脚将 在16个时钟周期后变为开路漏极输出。 重读结果将由 SDIO 引脚驱动,但前提是有一个从 SDIO 到 VCC 的上拉电阻器,并且只有当 SPI 控制器 还禁用了其在 SDIO 上的输出驱动器并成为一个高阻抗输入,可以从 LMK04821读取 SDIO。

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

    我的问题已经解决。 感谢你的帮助