您尚未登录。

楼主 # 2021-12-13 15:18:35

结束莫
会员
注册时间: 2021-05-20
已发帖子: 5
积分: 30

linux解决SOC与FPGA(SDIO)接口通信问题,大佬们求助求助!!!!!!!!!!!!!

最近手头上的一个任务,为了让SOC与FPGA进行通信,通信的协议是SDIO协议,为了能够通过自己的驱动来完成SDIO命令发送以及数据的接收。
讲述一下目前情况,SDIO卡设备是不存在,所以HOST端发送的CMD5 CMD52 CMD53命令能回复的我都自己手动去回复了,最终在板端上完成了卡的识别
[    1.211300] mmc1: new SDIO card at address 0000
[    1.211422] new card name mmc1:0000
虽然不知道建立的是否正确, 系统MMC设备的识别是这样
[    0.522983] mmc0: new HS200 MMC card at address 0001
HOST代码跑完之后,在/sys/bus/sdio/devices 下,出现了mmc1:0000:1这个节点。同时在/sys/bus/mmc下也出现了mmc1:0000
我寻思使用sdio_register_driver 注册的方式注册是不是应该能够与之匹配,但是当我使用sdio总线方式去注册则需要一个id_table,这个id_table,我看描述是厂商里面写的,需要解析Cis,但是这一部分由于我是没有实际的卡,所以我跳过了,随便给了一个值,注册是能够注册,但是匹配不成功,但是当我使用mmc_register_driver 去注册是能匹配成功(进到probe里面打印)。这样是对的还是错的步骤?

我注册成mmc总线的设备之后,我调用底层发送一个Cmd命令的请求,但是发现没有时钟以及CMD信号出来,是因为没有获得HOST的控制权吗?(跑系统内核代码的时候发送的CMD命令是能够检测到信号的)

static const struct sdio_device_id  fpga_id_table[] = {
	{ SDIO_DEVICE(0x10, 0x10) },
	{}
};
static struct sdio_driver  fpga_sdio_driver = {
	 
	.probe		= fpga_sdio_probe,
	.remove 	= fpga_sdio_remove,
	.name       = "fpga_sdio",
	.id_table   = fpga_id_table,
    //  .drv       ={
          
      
	// //  .name  =  "",		
      
	// }
};

static int __init fpga_sdio_init(void)
{
	int err;

	err = sdio_register_driver(&fpga_sdio_driver);
	if (err)
		printk(KERN_ERR"failed to register sdio driver: %d", err);
	else
		printk(KERN_ERR" register successful\n");
	return err;
}

static void __exit  fpga_sdio_exit(void)
{
	sdio_register_driver(&fpga_sdio_driver);
	printk(KERN_ERR"unloaded");
}
 

_20211213151027.png

离线

楼主 #1 2021-12-13 15:20:28

结束莫
会员
注册时间: 2021-05-20
已发帖子: 5
积分: 30

Re: linux解决SOC与FPGA(SDIO)接口通信问题,大佬们求助求助!!!!!!!!!!!!!

使用mmc_register_driver注册匹配成功的时候,我还需要手动配置HOST的时钟?我理解是HOST原厂已经配置好了,我在自己的写的驱动上直接发送数据指令好了,是这样吗?

离线

楼主 #5 2021-12-13 20:33:10

结束莫
会员
注册时间: 2021-05-20
已发帖子: 5
积分: 30

Re: linux解决SOC与FPGA(SDIO)接口通信问题,大佬们求助求助!!!!!!!!!!!!!

yobbo 说:

需要很高的通讯速率? 模拟SDIO的时序太复杂了,研究过但最后还是放弃了,用spi+dma基本上可以满足百分之九十八的需求了,主要是模拟简单!
不知道LZ需要多高的通讯速率还是有特殊要求?

不是模拟,时序这个芯片厂弄好了,用FPGA搞这个说出来你怕你不信,SOC IO不够用,用SDIO通信FPGA来控制。所以没有办法,还得看

离线

楼主 #6 2021-12-13 20:43:46

结束莫
会员
注册时间: 2021-05-20
已发帖子: 5
积分: 30

Re: linux解决SOC与FPGA(SDIO)接口通信问题,大佬们求助求助!!!!!!!!!!!!!

小智 说:

sdio_linux_fpga-master.zip这个是老毛子写的,可以参考一下

首先感谢
1_20211213-2043.png
我现在进展是已经用SDIO总线的方式匹配上了,但是很奇怪,调用function函数没有出现信号,也没有时钟,我看了你分享的代码也没看到相关时钟操作。最骚的是,我自己调用function下的命令函数没有时钟,但是系统在识别我的虚拟卡设备的时候居然有时钟以及信号!!!!!!

离线

楼主 #7 2021-12-16 09:29:37

结束莫
会员
注册时间: 2021-05-20
已发帖子: 5
积分: 30

Re: linux解决SOC与FPGA(SDIO)接口通信问题,大佬们求助求助!!!!!!!!!!!!!

问题已经解决,果然还是得好好看看厂家的代码以及MMC的源码

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn