主题中讨论的其他器件: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