Firefly开源社区

标题: ROC-RK3308-CC开发实例总结--HC-SR04超声波测距模块调试 [打印本页]

作者: Yzh    时间: 2018-11-28 17:09
标题: ROC-RK3308-CC开发实例总结--HC-SR04超声波测距模块调试
本帖最后由 YAo 于 2018-11-28 17:12 编辑

HC-SR04是一款常见的超声波测距传感器,它可以提供2cm-400cm的非接触式测距功能,精度达到3mm,基本可以满足一般测距需求。该款模块的两个IO口,其中trig为触发信号输入,echo为回响信号输出。接下来说说调试方法。
1. dts设备注册
修改 kernel/arch/arm64/boot/dts/rockchip/rk3308-firefly.dtsi 该文件,增加以下资源描述:
  1. sr04_test: sr04_test {
  2.     compatible= "ultrasonic";
  3.     trig-gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_HIGH>;
  4.     echo-gpios = <&gpio0 RK_PC4 GPIO_ACTIVE_HIGH>;
  5.     status = "okay";
  6. };
复制代码

2. 驱动编写,笔者在iio子系统下进行驱动编写,在路径 kernel/drivers/iio/下创建ultrasonic/,参考这款传感器的规格书,下面是部分驱动代码的实现:
信号触发
  1.         
  2.   ret = gpio_direction_output(sr04->trig, 0);
  3.         if (ret)
  4.                goto err;
  5.         udelay(2);
  6.         ret = gpio_direction_output(sr04->trig, 1);
  7.         if (ret)
  8.                goto err;
  9.         udelay(15);
  10.         ret = gpio_direction_output(sr04->trig, 0);
  11.         if (ret)
  12.                goto err;
复制代码
中断处理

  1. static irqreturn_t sr04_handle_irq(int irq, void *data)
  2. {
  3.     struct iio_dev *iio = data;
  4.     struct sr04 *sr04 = iio_priv(iio);

  5.     current_echo_value[sr04->number] = gpio_get_value(sr04->echo);
  6.     if (current_echo_value[sr04->number] != last_echo_value[sr04->number]) {
  7.       if(sr04_flag[sr04->number]==0){
  8.             do_gettimeofday(&start[sr04->number]);
  9.             sr04_flag[sr04->number] = 1;
  10.             last_echo_value[sr04->number] = current_echo_value[sr04->number];
  11.       }
  12.       else{
  13.             do_gettimeofday(&end[sr04->number]);
  14.             time_lag[sr04->number] = (end[sr04->number].tv_usec-start[sr04->number].tv_usec);
  15.             sr04_flag[sr04->number] = 0;
  16.             last_echo_value[sr04->number] = current_echo_value[sr04->number];
  17.       }
  18.       ev_press = 1;
  19.       wake_up_interruptible(&sr04_waitq);
  20.     }

  21.     return IRQ_HANDLED;
  22. }
复制代码


完整的驱动文件可见后面附件。


3. 完成驱动代码编写后,分别修改kernel/drivers/iio/Kconfig b/kernel/drivers/iio/Kconfigkernel/drivers/iio/Makefile b/kernel/drivers/iio/Makefile
  1. <font color="Black">diff --git a/kernel/drivers/iio/Kconfig b/kernel/drivers/iio/Kconfig
  2. index 66792e7..07fdf91 100644
  3. --- a/kernel/drivers/iio/Kconfig
  4. +++ b/kernel/drivers/iio/Kconfig
  5. @@ -53,6 +53,7 @@ source "drivers/iio/dac/Kconfig"
  6. source "drivers/iio/frequency/Kconfig"
  7. source "drivers/iio/gyro/Kconfig"
  8. source "drivers/iio/humidity/Kconfig"
  9. <font color="Red">+source "drivers/iio/ultrasonic/Kconfig"</font>
  10. source "drivers/iio/imu/Kconfig"
  11. source "drivers/iio/light/Kconfig"
  12. source "drivers/iio/magnetometer/Kconfig"
  13. diff --git a/kernel/drivers/iio/Makefile b/kernel/drivers/iio/Makefile
  14. index aeca726..c409a89 100644
  15. --- a/kernel/drivers/iio/Makefile
  16. +++ b/kernel/drivers/iio/Makefile
  17. @@ -19,6 +19,7 @@ obj-y += dac/
  18. obj-y += gyro/
  19. obj-y += frequency/
  20. obj-y += humidity/
  21. <font color="Red">+obj-y += ultrasonic/</font>
  22. obj-y += imu/
  23. obj-y += light/</font>
复制代码
  1. <font color="Black">cd kernel/
  2. make menuconfig</font>
复制代码
输入上面的命令,进入图形选择界面,/ 搜索sr04,选择、保存、退出。

  1. --- a/kernel/arch/arm64/configs/firefly-rk3308_linux_defconfig
  2. +++ b/kernel/arch/arm64/configs/firefly-rk3308_linux_defconfig
  3. @@ -251,6 +251,7 @@ CONFIG_IIO=y
  4. CONFIG_IIO_BUFFER=y
  5. CONFIG_IIO_KFIFO_BUF=y
  6. CONFIG_IIO_TRIGGER=y
  7. <font color="Red">+CONFIG_SR04=y</font>
  8. CONFIG_ROCKCHIP_SARADC=y
  9. CONFIG_PWM=y
  10. CONFIG_PWM_ROCKCHIP=y
复制代码
配置好后,参考官方维基http://wiki.t-firefly.com/ROC-RK ... html#bian-yi-kernel进行编译即可。



编译烧录完成,可以找到我们挂载的设备节点
  1. # cd /sys/bus/iio/devices/iio:device1
  2. # ls
  3. dev     in_temp_input     name     of_node     power     subsystem     uevent
复制代码




sr04_driver.tar.gz

141.1 KB, 下载次数: 66, 下载积分: 灯泡 -1 , 经验 -1


作者: 升斗老民    时间: 2018-11-29 22:42
我想查看
作者: Hegemony    时间: 2018-12-30 11:26
想看代码,怎么办。
作者: qq1715497152    时间: 2019-1-5 15:59
学习一下,谢谢分享!
作者: jjaacckk123    时间: 2019-1-11 09:33
不错  
作者: 腾龙    时间: 2019-1-14 08:29

作者: silver_mirror    时间: 2019-3-26 17:06
good!
作者: 978651195    时间: 2019-4-16 09:01
???
作者: 978651195    时间: 2019-4-16 09:03
。。。
作者: 978651195    时间: 2019-4-16 09:07

作者: 久明大魔王    时间: 2019-4-25 10:11
1111
作者: humhh575    时间: 2019-7-17 10:22
kankan ,
作者: 18899714881    时间: 2019-10-17 16:46
水一下
作者: homgle    时间: 2019-12-13 17:55
thanks
作者: Kulenc    时间: 2020-8-11 16:35
学习一下

作者: ziyundongqi    时间: 2021-7-13 17:46
nice




欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1