454496988

454496988

1个粉丝

6

问答

0

专栏

0

资料

454496988  发布于  2021-02-20 11:22:35
采纳率 0%
6个问答
3049

Hi3531DV200 SPI有人调通吗

 
目前我在sys_config.c文件中将SPI的管脚复用与时钟修改了,打开SPI设备不能与GV7704通信,能帮忙看下哪里有问题吗

//管脚复用
static void spi_pin_mux(void)
{
    SYS_WRITEL(g_reg_iocfg_base + 0x010c, 0x1403); /* SPI_CSN0 */
    SYS_WRITEL(g_reg_iocfg_base + 0x0110, 0x1403); /* SPI_CSN1 */
    SYS_WRITEL(g_reg_iocfg_base + 0x0114, 0x1403); /* SPI_CSN2  */
    SYS_WRITEL(g_reg_iocfg_base + 0x0118, 0x1403); /* SPI_CSN3  */

    SYS_WRITEL(g_reg_iocfg_base + 0x011C, 0x1403); /* SPI_SDI */
    SYS_WRITEL(g_reg_iocfg_base + 0x0120, 0x1403); /* SPI_SDO */
    SYS_WRITEL(g_reg_iocfg_base + 0x0124, 0x1403); /* SPI_CLK */
}

//时钟
static void spi_clk_cfg_3531dv200(void)
{
SYS_WRITEL(g_reg_crg_base + 0x4480, 0x1);
SYS_WRITEL(g_reg_crg_base + 0x4480, 0x10);
}

//打开SPI设备
int app_per_spi_init(const char* device)
{
        int fd = -1;
        fd = open(device, O_RDWR);
        if(fd < 0)
        {
                printf("----open spidev failed!----\n");
                return -1;
        }
        int ret = 0;
        ret = ioctl(fd, SPI_IOC_WR_MODE, &spi_mode);
    if(ret == -1)
        {
                printf("set spi WR mode error\n");
                return -1;
    }

    ret = ioctl(fd, SPI_IOC_RD_MODE, &spi_mode);
    if(ret == -1)
        {
        printf("set spi RD mode error\n");
        return -1;
    }   

    ret = ioctl(fd, SPI_IOC_WR_BITS_PER_WORD, &bits);
    if(ret == -1)
        {
                printf("set spi write bits per word error\n");
                return -1;
    }

    ret = ioctl(fd, SPI_IOC_RD_BITS_PER_WORD, &bits);
    if(ret == -1)
        {
                printf("set spi read bits per word error\n");
                return -1;
    }

    ret = ioctl(fd, SPI_IOC_WR_MAX_SPEED_HZ, &speed);
    if(ret == -1)
        {
                printf("set spi write Max speed error\n");
                return -1;
    }
   
    ret = ioctl(fd, SPI_IOC_RD_MAX_SPEED_HZ, &speed);
    if(ret == -1)
        {
                printf("set spi write Max speed error\n");
                return -1;
    }
        return fd;
}

void app_per_spi_sendData(int fd, unsigned char *ptrBuf, int bufLen)
{
        int i;
        int retval = 0;
        int mode = spi_mode;
       
        retval = ioctl(fd, SPI_IOC_WR_MODE, &mode);
        if (retval < 0)
        {
                printf("ioctl error \n");
                close(fd);
                return ;
        }
       
        struct spi_ioc_transfer mesg[1];
       
        unsigned char  buf[SSP_BUF_LEN];

        memset(mesg, 0, sizeof mesg);
       
//        mesg[0].rx_buf = (unsigned long)buf,
        mesg[0].tx_buf = (unsigned long)buf;
        mesg[0].len = bufLen;
        mesg[0].delay_usecs = delay;
        mesg[0].speed_hz = speed;
        mesg[0].bits_per_word = bits;
        mesg[0].cs_change = 1;

        memset(buf, 0, SSP_BUF_LEN);
       
        reverse8(buf, mesg[0].len);

        retval = ioctl(fd, SPI_IOC_MESSAGE(1), &mesg);
    if(retval != mesg[0].len)
        {
                printf("SPI_IOC_MESSAGE error \n");
        }
        return ;
}

void app_per_spi_recvData(int fd, unsigned char *ptrBuf, int bufLen)
{
        int i;
        int retval = 0;
        uint32_t mode = spi_mode;
        struct spi_ioc_transfer mesg[1];
       
        memset(mesg, 0, sizeof mesg);

        mesg[0].rx_buf = (unsigned long)ptrBuf,
//        mesg[0].tx_buf = (unsigned long)ptrBuf;
        mesg[0].len = bufLen;
        mesg[0].speed_hz = speed;
        mesg[0].delay_usecs = delay;
        mesg[0].bits_per_word = bits;
        mesg[0].cs_change = 1;

        retval = ioctl(fd, SPI_IOC_MESSAGE(1), &mesg);
    if(retval < 1)
        {
                printf("SPI_IOC_MESSAGE error \n");
        }
        return ;
}

我来回答
回答3个
时间排序
认可量排序

0个粉丝

1

问答

0

专栏

1

资料

2021-02-21 11:08:57
认可0

SPI需要根据实际要通讯的对象来,最好用示波器看一下是MSB还是LSB,我最近调试一个视频芯片SPI通讯,就要将demo中发送接收的数据高低字节变一下

goodman

2个粉丝

30

问答

18

专栏

17

资料

goodman 2021-02-22 09:45:27
认可0

可以通讯的,我们刚调试完成,注意GV7704的数据发包和接受格式,6个字节一组,有他自己的协议格式

middle1102

0个粉丝

2

问答

0

专栏

0

资料

middle1102 2021-12-12 16:48:15
认可0
我做过 qq464122971
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区