面試被問到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

 

 

具體使用時:async

相關文章
相關標籤/搜索