Loading

面试被问到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

 

 

具体使用时:

posted @ 2019-03-29 14:52  dinosaur-  阅读(1623)  评论(0编辑  收藏  举报