您的位置:首页 > 运维架构 > Linux

Linux 下Altera SPI驱动使用note

2017-06-06 15:49 302 查看

配置SPI



关于Clock相位和极性的说明



device tree的描述

spi_0: spi@0x100000100 {
compatible = "altr,spi-16.1", "altr,spi-1.0";
reg = <0x00000001 0x00000100 0x00000020>;
interrupt-parent = <&hps_0_arm_gic_0>;
interrupts = <0 43 4>;
clocks = <&clk_0>;
#address-cells = <1>;   /* embeddedsw.dts.params.#address-cells type NUMBER */
#size-cells = <0>;  /* embeddedsw.dts.params.#size-cells type NUMBER */
bus-num = <0>;  /* embeddedsw.dts.params.bus-num type NUMBER */
num-chipselect = <1>;   /* embeddedsw.dts.params.num-chipselect type NUMBER */
status = "okay";    /* embeddedsw.dts.params.status type STRING */
spidev0: spidev@0 {
compatible = "rohm,dh2228fv";   /* appended from boardinfo */
reg = <0>;  /* appended from boardinfo */
spi-max-frequency = <1000000>;  /* appended from boardinfo */
}; //end spidev@0 (spidev1)
}; //end spi@0x100000100 (spi_0)


其中#address-cells = <1>;#size-cells = <0>; 两行必须用。

spi-max-frequency = <1000000>; 这个信息在设备注册时必须使用,否则会导致注册不成功。1000000 clock frequency要符合

内核驱动使能:

-->driver
-->spi_altera


编译之后boot就会在dev目录下看到文件节点:/dev/spi32766.0

在程序应用空间使用的时候通过spi_ioc_transfer 结构体来调用spi 总线传输。

mpu9250是先发送寄存器地址。根据读写需要需要设定寄存器字节的最高位信息。然后开始发送数据。

如果是读数据的话,第一个byte 读取的数据是0xff,应丢弃。从第二个开始取数据。

spi_transfer.tx_buf = (unsigned long)tx;
spi_transfer.rx_buf = (unsigned long)rx;
spi_transfer.len = length;
spi_transfer.speed_hz = speed_hz;
spi_transfer.bits_per_word = bits_per_word;
spi_transfer.delay_usecs = delay_usecs;
int status = ioctl(spi_fd, SPI_IOC_MESSAGE(1), &spi_transfer);


length为实际操作中需要多少组的时钟时序。如果淡出读n个数据的话,在length=n+1.1位为发送起始地址需要的时钟。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: