spi、pwm接口使用问题
收藏回复举报
spi、pwm接口使用问题
t('forum.solved') 已解决
发表于2023-08-23 16:23:40
0 查看

1、spi接口液晶屏调试问题:

①实际调试中,通过gpio模拟spi对oled屏进行写入后,oled屏可以正常显示字符及数字,验证代码的数据写入流程没问题;

② 利用spi接口实现同样的流程,发现没法正常显示,且逻辑分析仪抓取的数据与理论发送的数据也完全不同。对应的初始化及写spi操作部分的代码如下:

 // 数据spi发送及接收代码

int SPIDataRW (unsigned char *tx_data, unsigned char *rx_data, int len) 

        int i = 0; 

        struct spi_ioc_transfer spi ; 

        memset (&spi, 0, sizeof (spi)) ; 

 

        spi.tx_buf        = (unsigned long)tx_data ; 

        spi.rx_buf        = (unsigned long)rx_data ; 

        spi.len           = len ; 

        spi.delay_usecs   = spiDelay ; 

        spi.speed_hz      = spiSpeeds ; 

        spi.bits_per_word = spiBPW ; 

 

        return ioctl (spiFds, SPI_IOC_MESSAGE(1), &spi) ; //SPI_IOC_MESSAGE(1) 

//初始化spi

int SPISetupMode (int speed, int mode, int bpw) 

        uint8_t lsb=0;

        int fd; 

 

        if ((fd = open (spiDev0, O_RDWR)) < 0) 

        { 

                printf("Unable to open SPI device: %s\n", strerror (errno)) ; 

                return -1; 

        } 

        spiSpeeds = speed ; 

        spiFds = fd ; 

        /* 

         *  Set Mode

         ********************************************************************************* 

         */ 

        if (ioctl (fd, SPI_IOC_WR_MODE, &mode) < 0) 

        { 

                printf("Can't set spi mode: %s\n", strerror (errno)) ; 

                return -1; 

        } 

/* 

         * set bits_per_word

         ********************************************************************************* 

         */ 

        if (ioctl (fd, SPI_IOC_WR_BITS_PER_WORD, &spiBPW) < 0) 

        { 

                printf("Can't set bits per word: %s\n", strerror (errno))  ; 

                return -1; 

        } 

 /* 

         * set speed 

         ********************************************************************************* 

         */ 

        if (ioctl (fd, SPI_IOC_WR_MAX_SPEED_HZ, &speed) < 0) 

        { 

                printf("Can't set max speed hz: %s\n", strerror (errno)); 

                return -1; 

        } 

        /*设置LSB模式*/ 

        if (ioctl(fd, SPI_IOC_WR_LSB_FIRST, &lsb) < 0) { 

                perror("SPI rd_lsb_fist"); 

                return -1; 

        } 

        return fd ; 

// 实际spi数据写入函数

void spi_write_cmd(uint8_t dat,uint8_t cmd) 

        int ret=0; 

        uint8_t dat_r=0, i; 

        ret = SPIDataRW(&dat, &dat_r, 1); 

        if(ret < 1) 

                perror("can't send spi message"); 

}

代码设置过程中是否有问题,另外能否提供spi传输的示例代码。

2、pwm接口调试问题:

在/sys/class/pwm目录下没有提供对pwm控制的主控节点(如:pwmchip0),因此不知道具体如何对pwm接口进行设置及数据发送。

能否提供对应的接口操作示例代码?

我要发帖子