本文主要是介绍称重传感器HX711-Linux内核驱动,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
称重传感器hx711-liunx内核驱动。
若在用户空间驱动IO口,即使不加延时,脉冲的周期也很长,正电平时间远超传感器要求的50us,无法驱动传感器。
下图为HX711传感器的通信时序图。
故编写内核驱动,此处参考了韦东山嵌入式linux的视频。
内核驱动组成:
代码太长了我开源在github里,大家自己看。Github开源地址
设备树写法:
hx711 {status = "okay";compatible = "hx,hx711"; pd-sclk-gpio = <&gpio3 30 GPIO_ACTIVE_HIGH>;pd-ldout-gpio = <&gpio3 28 GPIO_ACTIVE_HIGH>;linux,default-trigger = "gpio";default-state = "off";};
读取传感器数据的核心函数
int get_adc_data(void)
{unsigned long Count;unsigned char i;gpio_set_value(pdata_g->pd_sck_gpio, 0);Count = 0;for (i=0; i<24; i++){gpio_set_value(pdata_g->pd_sck_gpio, 1);Count = Count << 1;gpio_set_value(pdata_g->pd_sck_gpio, 0);if(gpio_get_value(pdata_g->dout_gpio)) Count++;}gpio_set_value(pdata_g->pd_sck_gpio, 1);Count = Count ^ 0x800000;gpio_set_value(pdata_g->pd_sck_gpio, 0);return(Count);
}
几个注意点:
- 设备树的写法
- 从设备树获取信息的函数:获取设备树节点和获取GPIO口的函数,我试了好多种才试对,有时候稍微差一点也不行,大家参照我代码里面的应该没问题。
- 该例程注册的是杂项设备:,在用户空间调用的时候要与注册的设备名称一致
- 调试时可多用内核打印函数printk打印信息,这样就能发现问题出在哪里。
这篇关于称重传感器HX711-Linux内核驱动的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!