ARM外设的一些理解有关问题
ARM外设的一些理解问题
最近我想一个基于ARM的温度传感(DS18B20)。但是对于GPIO的理解还是有问题。
下面是我的硬件连接图:

DS18B20引脚VCC、GND连接至电源的VCC、GND,引脚DQ连接到GPIO口。
我用的是tinny4412开发板,GPIO是I2C I/O口的扩展。
以下是我不明白的地方:
1、是否要配置GPIO引脚的频率,因为我想DS18B20也有自己的频率吧,我看DS18B20采用的是1-wire总线,对时间有特定要求,海域我在想,这些延时可以用linux里的定时器来解决。哎我很混乱。
2、是要用到i2c的驱动模型i2c_board_info,是不是要通过I2c接口去访问GPIO口i2c_adapter();还是用字符设备模型驱动就可以,gpio_request就可以,这个我也很混乱。
3、DS18B20的DQ引脚是否有电压要求,GPIO的输出电压时3.3V。
我还在学习阶段,有写过板子上的内设的驱动,对于外设还不懂,希望各位大大帮忙啦!
------解决方案--------------------
记得几年前就用S3C2440写过DS18B20的驱动程序和应用程序,在一般单片机上也搞过,不是很难。
1.DS18B20是很容易就能驱动起来的,你都上到这么高级的CPU,GPIO引脚频率的问题不用担心不够高。延时可以用定时器,但建议先用自旋锁试试。注意把DS18B20的时序调好,这个是驱动DS18B20最关键的。
2.完全不需要用到I2C,因为DS18B20根本就不是用的I2C的那种协议,是1-wire的协议,I2C在这里是用不上的。
只需要用可读可写的GPIO就行了,还是要注意时序问题。
3.DQ我已经不记得是什么引脚了,但注意该供电的供电,电路图的问题你看DS18B20的datasheet就行了。
严重感觉楼主没有好好看datasheet就开始发难了。要看了datasheet,你都不会问出这些问题。
------解决方案--------------------
微妙级的延时,udelay应该足够了吧。要确实不行了,你就用定时器吧。
------解决方案--------------------
最近我想一个基于ARM的温度传感(DS18B20)。但是对于GPIO的理解还是有问题。
下面是我的硬件连接图:
DS18B20引脚VCC、GND连接至电源的VCC、GND,引脚DQ连接到GPIO口。
我用的是tinny4412开发板,GPIO是I2C I/O口的扩展。
以下是我不明白的地方:
1、是否要配置GPIO引脚的频率,因为我想DS18B20也有自己的频率吧,我看DS18B20采用的是1-wire总线,对时间有特定要求,海域我在想,这些延时可以用linux里的定时器来解决。哎我很混乱。
2、是要用到i2c的驱动模型i2c_board_info,是不是要通过I2c接口去访问GPIO口i2c_adapter();还是用字符设备模型驱动就可以,gpio_request就可以,这个我也很混乱。
3、DS18B20的DQ引脚是否有电压要求,GPIO的输出电压时3.3V。
我还在学习阶段,有写过板子上的内设的驱动,对于外设还不懂,希望各位大大帮忙啦!
------解决方案--------------------
记得几年前就用S3C2440写过DS18B20的驱动程序和应用程序,在一般单片机上也搞过,不是很难。
1.DS18B20是很容易就能驱动起来的,你都上到这么高级的CPU,GPIO引脚频率的问题不用担心不够高。延时可以用定时器,但建议先用自旋锁试试。注意把DS18B20的时序调好,这个是驱动DS18B20最关键的。
2.完全不需要用到I2C,因为DS18B20根本就不是用的I2C的那种协议,是1-wire的协议,I2C在这里是用不上的。
只需要用可读可写的GPIO就行了,还是要注意时序问题。
3.DQ我已经不记得是什么引脚了,但注意该供电的供电,电路图的问题你看DS18B20的datasheet就行了。
严重感觉楼主没有好好看datasheet就开始发难了。要看了datasheet,你都不会问出这些问题。
------解决方案--------------------
微妙级的延时,udelay应该足够了吧。要确实不行了,你就用定时器吧。
------解决方案--------------------
udelay不精确(刚才说错了),我测过了,mdelay精确度可以。内核的定时器也是用滴答,但是我的HZ=200,精度是5ms,今天折腾一天没结果。hrtimer低精度也是依靠滴答实现的,高精度研究不透,怎么办啊!
内核定时器的频率太低了,你就不要用内核定时器做延时,没有必要的话就先不要改动内核定时器设置。
你用其他的定时器是对的做法,hrtimer的精度低了,估计是hrtimer的时钟源不够高,或是分频分太多了。