pxe8311+spi-altera+m25p驱动设计
来源:互联网 发布:服装大师软件 编辑:程序博客网 时间:2024/05/22 06:41
1. spi master设备相关数据
static struct resource ninja_platform_resources[] = {
};
static struct platform_device ninja_platform_device = {
};
2. spi master设备注册
platform_device_register()
--> device_initialize()
--> platform_device_add()
----> insert_resource()
------> __insert_resource()
--------> __request_resource()
----> device_add()
------> platform_match()
--------> platform_match_id()
--------> strcmp(pdev->name, drv->name)
匹配条件设备名字和驱动名字相同,pdev->name = spi-altera, drv->name = spi-altera => driver = spi-altera.c
3. spi master驱动注册
driver - spi-altera.c
altera_spi_init()
--> platform_driver_register()
----> driver_register()
------> driver_attach()
--------> __driver_attach()
----------> driver_match_device()
------------> platform_match()
--------------> strcmp(pdev->name, drv->name)
匹配条件设备名字和驱动名字相同
----------> driver_probe_device()
------------> really_probe()
--------------> altera_spi_probe()
运行probe函数
altera_spi_probe()
--> spi_alloc_master()
--> platform_get_resource()
--> devm_ioremap_nocache()
--> platform_get_irq()
--> spi_bitbang_start()
----> INIT_WORK(&bitbang->work, bitbang_work)
------> bitbang->txrx_bufs(spi, t)
--------> altera_spi_txrx()
----> spi_register_master()
------> scan_boardinfo()
--------> if (chip->bus_num != master->bus_num) continue;
匹配条件bus_num相同
master->bus_num = pdev->id = 0, chip = bi->board_info, chip->bus_num = 0
--------> spi_new_device()
----------> spi_alloc_device()
----------> spi_add_device()
4. spi flash设备相关数据
static struct mtd_partition ninja_spi_flash_partitions[] = {
};
static struct flash_platform_data ninja_spi_flash_data = {
};
static struct spi_board_info ninja_spi_board_info[] __initdata = {
};
5. spi flash设备注册
spi_register_board_info()
--> list_add_tail(&bi->list, &board_list)
add to list board_list
6. spi flash驱动
m25p80_init()
--> spi_register_driver()
----> match : strcmp(spi->modalias, drv->name) == 0
匹配条件spi->modalias和drv->name相同
运行probe
----> m25p_probe()
------> spi->dev.platform_data->type == plat_id->name
软件支持设备型号
------> jedec_probe()
从硬件获取设备型号,要与软件相匹配
------> add_mtd_partitions()
--------> add_one_partition()
------> add_mtd_device()
写函数
write_sr()
--> spi_message_init()
--> spi_message_add_tail()
--> spi_sync()
读函数
read_sr()
--> spi_write_then_read()
----> spi_message_init()
----> spi_message_add_tail()
----> spi_sync()
------> spi_async()
--------> master->transfer()
----------> spi_bitbang_transfer()
------------> queue_work()
--------------> bitbang_work()
----------------> altera_spi_txrx()
------> wait_for_completion()
7. 提供的mtd接口
flash->mtd.erase = m25p80_erase;
flash->mtd.read = m25p80_read;
if (info->jedec_id >> 16 == 0xbf)
else
文件系统操作顺序
fs->vfs->dev->mtd->ops
- pxe8311+spi-altera+m25p驱动设计
- spi(2)pxe8311+spi-altera+m25p驱动设计
- Linux 下Altera SPI驱动使用
- Linux 下Altera SPI驱动使用note
- S3c2410-SPI驱动设计
- Linux SPI驱动设计
- Linux SPI 子系统 驱动设计
- MSP430 SPI驱动 代码设计流程
- ALtera 设计注意事项-不断更新
- altera 设计--仿真--下载
- spi驱动
- SPI驱动
- SPI驱动
- spi驱动
- spi驱动
- SPI驱动
- 初学Altera FPGA 之Altera USB-Blaster驱动安装
- Linux3.6.9下AD7490的SPI通信驱动设计
- 逻辑地址,线性地址,物理地址,虚拟地址
- 怎样用SQL语句创建表和修改表
- B/S与C/S区别
- 菜鸟,大牛和教主,三者的区别
- Uva - 10566 - Crossed Ladders
- pxe8311+spi-altera+m25p驱动设计
- 一个跨平台的 C++ 内存泄漏检测器
- Android NDK: WARNING: APP_PLATFORM android-14 is larger than android:minSdkVersion 8
- C++实例——运算符重载
- mysql-front
- Oracle数据库-1
- NSXMLParse 解析 soap消息
- SQL语句集锦
- java使用正则表达式——实例