示例用例
以下列出了昉·惊鸿7110 SPI的典型用例。
查找原始内核驱动程序
驱动程序文件在以下路径:
freelight-u-sdk/linux/drivers/spi/spidev.c
该驱动程序是一个Linux嵌入式SPI设备驱动程序。
注册一个SPI驱动程序
您可以使用spi_register_driver接口来注册一个SPI驱动程序,作为SPI消息读写的基础。
以下代码为一个示例:
static int __init spidev_init(void) { int status; /* Claim our 256 reserved device numbers. Then register a class * that will key udev/mdev to add/remove /dev nodes. Last, register * the driver which manages those device numbers. */ BUILD_BUG_ON(N_SPI_MINORS > 256); status = register_chrdev(SPIDEV_MAJOR, "spi", &spidev_fops); if (status < 0) return status; spidev_class = class_create(THIS_MODULE, "spidev"); if (IS_ERR(spidev_class)) { unregister_chrdev(SPIDEV_MAJOR, spidev_spi_driver.driver.name); return PTR_ERR(spidev_class); } status = spi_register_driver(&spidev_spi_driver); if (status < 0) { class_destroy(spidev_class); unregister_chrdev(SPIDEV_MAJOR, spidev_spi_driver.driver.name); } return status; } module_init(spidev_init);
配置SPI驱动程序
同时,确保您已在dts文件中为SPI控制器添加了子设备的设备信息描述。
以下代码以spi0为例:
&spi0 { pinctrl-names = "default”; pinctrl-0 = <&ssp0_pins>; status = "disabled"; spi_dev0: spi@0 { compatible = "rohm,dh2228fv"; pl022,com-mode = <1>; spi-max-frequency = <10000000>; reg = <0>; status = "okay"; };
配置文件spi_dev0包含以下参数。
- compatible:驱动程序的兼容性信息。
- pl022,com-mode:驱动程序的通信模式。
以下为可用值:
- 0:轮询
- 1:中断
- 2:DMA
- spi-max-frequency:从设备最大频率值 注: 确保您根据实际情况设置了正确的最大频率值,如果配置了不正确的值,可能会导致传输中的数据丢失。
- reg:从设备的寄存器地址偏移量。
- status:从设备的状态。以下为可用值:
- okay:从设备工作正常。
- disabled:从设备被禁用。
配置内核菜单
在内核菜单配置页面,请选择User mode SPI device driver support选项。 图 1. User mode SPI device driver support


构建SPI文件
完成固件安装后,按照以下步骤构建SPI文件。
- 在/dev/文件夹下找到spidevX.0(X=1-7)设备。
- 在文件上执行读写操作。或者您可以使用Linux SPI工具,并在路径下运行以下命令:
freelight-u-sdk/linux/tools
- 执行以下命令,构建用于测试的SPI文件。
# make spi
结果: freelight-u-sdk/linux/tools/spi路径下生成可执行文件spidev_test。
测试SPI文件
按照以下步骤测试已生成额SPI文件。
- 将生成的文件复制到SoC中,并连接SPI上的I/O接口的TX和RX。
- 然后运行以下测试命令:
# /spidev_test -D /dev/spidevX.0 -v -p data
结果: 系统将显示您要传输的内容,测试示例如下:图 2. SPI测试示例