本文共 3205 字,大约阅读时间需要 10 分钟。
spi platform drvier 匹配 _probe 中devm_spi_register_master spi_register_master of_spi_register_master of_register_spi_devices of_register_spi_device spi_add_device device_add
spi_add_driver
必须至少有以下三种属性 compatible = "nanopi,spidev"; /* 此属性值用于与spi设备驱动匹配 */ reg = <0>; /*spi设备是没有设备地址的, 这里是指使用spi控制器的cs-gpios里的第几个片选io */ spi-max-frequency = <10000000>; /* 指定spi设备的最大工作时钟 */
spi.cdevm_spi_register_master // 注册 spi master spi_register_master of_register_spi_devices // 注册下面的多个设备 of_register_spi_device // 注册下面的一个设备 of_property_read_u32(nc, "reg", &value); // 解析设备节点中的 reg 节点. //spi->chip_select = value; of_property_read_u32(nc, "spi-max-frequency", &value); // 解析设备节点中的 spi-max-frequency 节点. spi_add_device(spi); if (master->cs_gpios) spi->cs_gpio = master->cs_gpios[spi->chip_select];
spi master 怎么用 csmaster->transfer_one_message = atmel_spi_transfer_one_message; cs_activate atmel_spi_one_transfer(master, msg, xfer); cs_activate spi_writel(as, CSR0 + 4 * spi->chip_select, asd->csr);
struct spi_device * spi_test;spi_probe(struct spi_device *spi) spi_test = spi; void do_spi_test(int value){ struct spi_message msg; struct spi_transfer xfer; char tx_buf[4] = { 0}; // 每次为 4组 0xXX char rx_buf[4] = { 0}; int i = 0; memset(tx_buf, value, sizeof(tx_buf)); for(i = 0;i<100;i++){ // 100 次 /* Init */ spi_message_init(&msg); memset(&xfer, 0, sizeof(xfer)); spi_message_add_tail(&xfer, &msg); /* Setup */ msg.spi = spi_test; xfer.len = 4; xfer.tx_buf = tx_buf; xfer.rx_buf = rx_buf; spi_sync(msg.spi, &msg); } }
转载地址:http://taigi.baihongyu.com/