示例用例

以下列出了昉·惊鸿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文件。
  1. /dev/文件夹下找到spidevX.0(X=1-7)设备。
  2. 在文件上执行读写操作。或者您可以使用Linux SPI工具,并在路径下运行以下命令:
    freelight-u-sdk/linux/tools
  3. 执行以下命令,构建用于测试的SPI文件。
    # make spi

    结果: freelight-u-sdk/linux/tools/spi路径下生成可执行文件spidev_test

测试SPI文件

按照以下步骤测试已生成额SPI文件。
  1. 将生成的文件复制到SoC中,并连接SPI上的I/O接口的TX和RX。
  2. 然后运行以下测试命令:
    #  /spidev_test -D /dev/spidevX.0 -v -p data
    结果: 系统将显示您要传输的内容,测试示例如下:
    2. SPI测试示例