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.

[参考译文] AM6442:适用于 AM6442 Linux 的 DAC60508ZCRTER

Guru**** 2560390 points
Other Parts Discussed in Thread: AM6442, DAC60508

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1571295/am6442-dac60508zcrter-with-am6442-linux

部件号:DAC60508
主题中讨论的其他器件:AM6442

工具/软件:

尊敬的团队:

我们 在其中一个项目中使用 DAC60508ZCRTER 芯片、该芯片连接到 AM6442 处理器。 下面是 SPI 的 DTS 设置

&MAIN_SPI1{
状态=“正常“;
pinctrl-names =“default";“;
pinctrl-0 =<&MAIN_SPI1_pins_default>;
CS-GPIOs =<&MAIN_GPIO1 47 GPIO_ACTIVE_LOW>;
TI、pindir-d0-out-D1-in;

spidev0: spidev@0 {
兼容=“lwn、bk4“;
reg =<0>;/*芯片选择 0 */
SPI-max-frequency =<1000000>;/*根据您的设备进行调整*/
#address-cells =<1>;
#size-cells =<0>;
};

};

MAIN_SPI1_PINS_DEFAULT:main-SPI1-default-pins{
pinctrl-single、pins =<
AM64X_IOPAD (0x0224、PIN_INPUT、0)/*(C14) SPI1_CLK */
/* AM64X_IOPAD (0x021c、PIN_OUTPUT_PULLDOWN、0)/*(B14) SPI1_CS0 */
AM64X_IOPAD (0x021c、PIN_OUTPUT_PULLDOWN、7)/*(B14) SPI1_CS0:GPIO1_47 */
AM64X_IOPAD (0x0228、PIN_OUTPUT、0)/*(B15) SPI1_D0 */
AM64X_IOPAD (0x022c、PIN_INPUT、0)/*(A15) SPI1_D1 */
>;
};

接下来、我将使用 C 应用程序与我将在此处附加的 DAC 器件进行通信

#include
#include
#include
#include
#include
#include
#include
#include
#include

#define device “/dev/spidev2.0 //根据您的系统进行调整
静态内部 SPI_FD;

//------------------------ SPI 初始化----------
int SPI_init (const char * device){
INT MODE = SPI_MODE_0;// DAC60508 使用 SPI 模式 0
INT 位= 8;
内部速度= 1000000;// 1MHz 安全启动

SPI_FD =开路(器件,O_RDWR);
如果 (SPI_FD < 0){
perror(“open")“);
返回–1;
}
if (ioctl (SPI_FD、SPI_IOC_WR_MODE、&MODE)< 0){
镜像(“SPI 模式“);
返回–1;
}
if (ioctl (SPI_FD、SPI_IOC_WR_BITS_PER_WORD、&bits)< 0){
镜像(“SPI 位“);
返回–1;
}
if (ioctl (SPI_FD、SPI_IOC_WR_MAX_SPEED_HZ、&SPEED)< 0){
镜像(“SPI 速度“);
返回–1;
}

返回 0;
}

//------------------------ DAC 读取----------------
int dac60508_read (uint16_t reg、uint16_t * value){
uint8_t TX[4]、rx[4]={0};

TX[0]= 0x20 |((reg >> 8) 和 0x0F);// CMD=2(读取)
TX[1]= reg & 0xFF;//寄存器地址
TX[2]= 0x00;//虚拟
TX[3]= 0x00;//虚拟

结构体 SPI_IOC_TRANSFER tr ={
.tx_buf =(无符号长整型)tx、
rx_buf =(无符号长整型)rx、
.len = 4、
.speed_Hz = 1000000、
.bits_per_word = 8、
};

if (ioctl (SPI_FD、SPI_IOC_message (1)、tr)< 0){
镜像(“SPI 读取“);
返回–1;
}

* value =((uint16_t) rx[2]<< 8)| rx[3];
返回 0;
}

//------------------------ DAC 写入----------------
int dac60508_write (uint16_t reg、uint16_t value){
uint8_t tx[4];

TX[0]= 0x10 |((reg >> 8)& 0x0F);// CMD=1(写入)
TX[1]= reg 和 0xFF;
TX[2]=(值>> 8)和 0xFF;
TX[3]=值和 0xFF;

结构体 SPI_IOC_TRANSFER tr ={
.tx_buf =(无符号长整型)tx、
rx_buf = 0、
.len = 4、
.speed_Hz = 1000000、
.bits_per_word = 8、
};

if (ioctl (SPI_FD、SPI_IOC_message (1)、tr)< 0){
镜像(“SPI 写入“);
返回–1;
}
返回 0;
}

//------------------------ 主要--------
int main (int argc、char *argv[]){
uint16_t 状态= 0;

if (SPI_init (device)< 0)
返回 1;

//步骤 1:读取 STATUS 寄存器 (0x05)
if (dac60508_Read (0x05、&status)== 0){
printf(“DAC60508 status = 0x%04X\n“、status);
}其他{
printf(“读取状态失败!\n“);
}

//步骤 2:可选择写入 DAC 通道
if (argc == 3){
INT channel = atoi (argv[1]);// 0–7
INT 值= atoi (argv[2]);// 0–65535(16 位满标度)

if (channel < 0 || channel > 7){
printf(“无效通道:%d(必须为 0–7)\n“,通道);
关闭 (SPI_FD);
返回 1;
}

uint16_t reg = 0x08 + channel;// DACx_DATA 寄存器从 0x08 开始

if (dac60508_write (reg、(uint16_t) value)== 0){
printf(“写入 DAC%d =%d (0x%04X)\n“,通道,值,值);
}其他{
printf(“写入 DAC%d\n“失败,通道);
}
}其他{
printf(“用法:%s \n“、argv[0]);
}

关闭 (SPI_FD);
返回 0;
}

器件在 Linux 操作系统上运行、当器件引导时、我可以看到/dev/spidev2.0 获取列表。 问题是当通信开始时、我无法看到 SPI_CS 变为低电平、它始终保持高电平

请告诉我遗漏了什么内容。 下面是原理图快照

请在这里帮助我们

此致、

Shwetha Nayak

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

    Shwetha、

    目前、我将把这篇文章移至处理器论坛。 在数据转换器领域、我们对这些处理器没有太多的经验、如果 您在更改/CS 线路时遇到问题、我认为它们能够为您提供帮助。  

    如果您能够使 SPI 工作(使用/CS、DIN 和 SCLK 线路)、我们将能够帮助进行 DAC60508 通信。

    Joseph Wu

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

    您好、Joseph:

    请帮助我将此主题迁移到处理器论坛、以便我们能够降低 CS 参数。 这对我们来说是非常关键的问题、必须尽快解决。

    感谢您的支持

    此致、

    Shwetha

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

    Shwetha、

    我已将其移至处理器论坛(在我刚内部将其分配给小组之前)。 希望他们能够为您提供帮助、如果您仍有问题、我们稍后可以将其移回数据转换器。  

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

    您好、Shwetha、我看到您使用的是“CS-GPIO"而非“而非本地 CS。 您能否分享您的“&MAIN_GPIO1"?“?

    此外、我在您的共享 DAC 器件*。c 文件 spidev2.0 中看到、不应该是 spidev1.0?

    #define DEVICE "/dev/spidev2.0" // Adjust for your system 
    或者实际上、在您看到/dev/spidev2.0 时、我们是否可以尝试使用“&MAIN_SPI2"而“而不是“&MAIN_SPI1"?“?
    谢谢您、
    Paula