面试被问到SPI总结
SPI驱动框架
1 枚举过程 drivers/spi/spi.c: spi_register_board_info /* 对于每一个spi_master,调用spi_match_master_to_boardinfo */ list_for_each_entry(master, &spi_master_list, list) spi_match_master_to_boardinfo /* board_info里含有bus_num, 如果某个spi_master的bus_num跟它一样 * 则创建一个新的spi_device */ if (master->bus_num == bi->busnum) spi_new_device spi_alloc_device /* 记录bi信息, 比如片选,MODE,MAX HZ */ spi_add_device /* 根据名字找到spi_driver, 调用它的probe函数 */ spi_setup(spi); device_add /* 会绑定到一个spi_driver */
2 数据收发过程 spi_write spi_message_init(&m); 初始化一个spi_message /* 一个不可打断的SPI传输过程: cs=0,传数据,cs=1 */ /* 一个spi_message由多个spi_transfer组成 */ spi_message_add_tail(&t, &m); /* spi_transfe是SPI上传输的单方向1个或多个字节 */ spi_sync(spi, &m); /* 启动传输并等待完成 */ 3 spi_driver如何调用spi_controller spi_sync __spi_sync(spi, message, 0); spi_async_locked __spi_async master->transfer(spi, message); wait_for_completion
具体使用时:
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步