代码工程的GITHUB连接:
https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi
1.Linux SDIO WIFI Marvell8801/Marvell88w8801(一) — 代码及文档介绍
2. Linux SDIO WIFI Marvell8801/Marvell88w8801(二) — Marvell88w8801驱动编译
3. Linux SDIO WIFI Marvell8801/Marvell88w8801(三) — Linux驱动以及组件的使用
4. Linux SDIO WIFI Marvell8801/Marvell88w8801(四) — Linux Wi-Fi架构
5. Linux SDIO WIFI Marvell8801/Marvell88w8801(五) — Linux SDIO API介绍
6. Linux SDIO WIFI Marvell8801/Marvell88w8801(六) — Marvell Linux Wi-Fi driver介绍-WIFI插入卡槽内发生的事情
7. Linux SDIO WIFI Marvell8801/Marvell88w8801(七) — Marvell Linux Wi-Fi driver初始化
8. Linux SDIO WIFI Marvell8801/Marvell88w8801(八) — Marvell Linux Wi-Fi driver 对接芯片上行下行接口介绍
下面来简短的介绍Linux SDIO的API,为了后续方面我们分析Marvell Linux Wi-Fi driver的时候认识,Linux Wi-Fi driver一共分为几个部分:
功能部分,中断部分,IO部分
功能部分如下:
1)int mmc_go_idle(struct mmc_host *host)
CMD0的实现
2)int mmc_set_relative_addr(struct mmc_card *card)
CMD3的实现
3)int mmc_send_io_op_cond(struct mmc_host *host, u32 ocr, u32 *rocr);
CMD5的实现
4)int mmc_select_card(struct mmc_card *card)
CMD7的实现
5)int mmc_io_rw_direct(struct mmc_card card, int write, unsigned fn,unsigned addr, u8 in, u8 out);
CMD52的实现
6)int mmc_io_rw_extended(struct mmc_card *card, int write, unsigned fn,unsigned addr, int incr_addr, u8 *buf, unsigned blocks, unsigned blksz);
CMD53的实现
中断部分如下:
1)int sdio_claim_irq(struct sdio_func *func, sdio_irq_handler_t *handler)
使能中断,其实内部的原理就是使用CMD52操作CCCR interrupt(CCCR 04H)
2)int sdio_release_irq(struct sdio_func *func)
失能中断,其实内部的原理就是使用CMD52操作CCCR interrupt(CCCR 04H)
IO部分如下:
1)int sdio_enable_func(struct sdio_func *func)
使能特定的func,其实内部的原理就是使用CMD52操作CCCR enable(CCCR 02H),然后直到IO ready(CCCR 03H)
2)int sdio_disable_func(struct sdio_func *func)
失能特定的func,气内部原理就是使用CMD52来操纵CCCR enable(CCCR 02H)
3)int sdio_set_block_size(struct sdio_func *func, unsigned blksz)
设置特定func的block size,内部原理就是使用CMD52操纵CCCR block size(CCCR 10h~11h)
4)u8 sdio_readb(struct sdio_func *func, unsigned int addr, int *err_ret)
读取特定的FUNC中的register address的1个byte的内容,用CMD52实现
5)void sdio_writeb(struct sdio_func *func, u8 b, unsigned int addr, int *err_ret)
往特定的FUNC中的register address写入一个byte,用CMD52实现
6)int sdio_memcpy_fromio(struct sdio_func *func, void *dst,unsigned int addr, int count)
采用增量的方式从特定的func,register address读取内容,原理是用CMD53实现
7)int sdio_memcpy_toio(struct sdio_func *func, unsigned int addr,void *src, int count)
采用增量的方式往特定的func,register address写入内容,原理是用CMD53实现
8)int sdio_readsb(struct sdio_func *func, void *dst, unsigned int addr,int count)
采用fixed的方式从特定的func,register address读取内容,原理是用CMD53实现
9)int sdio_writesb(struct sdio_func *func, unsigned int addr, void *src,int count)
采用fixed的方式往特定的func,register address写入内容,原理是用CMD53实现
10)u16 sdio_readw(struct sdio_func *func, unsigned int addr, int *err_ret)
采用增量的方式从特定的func,register address读取2个byte内容,用CMD53实现
11)void sdio_writew(struct sdio_func *func, u16 b, unsigned int addr, int *err_ret)
采用增量的方式往特定的func,register address写入2个byte内容,用CMD53实现
12)u32 sdio_readl(struct sdio_func *func, unsigned int addr, int *err_ret)
采用增量的方式从特定的func,register address读取4个byte内容,用CMD53实现
13)void sdio_writel(struct sdio_func *func, u32 b, unsigned int addr, int *err_ret)
采用增量的方式往特定的func,register address写入4个byte内容,用CMD53实现
14)unsigned char sdio_f0_readb(struct sdio_func *func, unsigned int addr,int *err_ret)
从FUNC0中特定的register address读取一个byte的内容,用CMD52实现
15)void sdio_f0_writeb(struct sdio_func *func, unsigned char b, unsigned int addr,int *err_ret)
往FUNC0中特定的register address写入一个byte的内容,用CMD52实现