|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
G-sensor 驱动实验教程 # N6 W. c6 j3 G( t4 S1 _
5 g# T F& K3 y n( g7 R l
$ ~1 T# u: _2 f4 M3 X2 E! v2 o4 ]" s7 O4 o
第一节 引言 --- G-sensor 电路原理图详解
/ m0 D# C G( k- }8 N* |+ [. m5 Y9 X) J {5 t
下图来源于文档 3128_sdk_a02_20170325.pdf 中第 2 页和第 12 页。' q; k+ ?3 M0 n' T5 G* O5 ?/ U2 G
如下两张图可以确定 G-sensor 是通过 I2c 与 cpu 相互通信的,cpu 作为主设备,G-sensor 作为从设备。因为 cpu 的 I2c 不仅仅与 G-sensor 相连,它连接了多个 I2c 从设备,并且通过从设备地址来确定当前和哪个从设备通信。
/ Y" d! c7 B, X' |2 }2 ?, _' u
/ F& U" e* C/ I! P- P
! U" t! t. j( ~. {; s. p图18 S# K, W6 K1 u, }0 R$ V
& m% q, x6 ?4 V9 y
( i B" b: F0 @/ Y
图2
' M2 T, j- p/ `" Y C" Z h5 f+ |, P; Z* Z: J
第二节 G-sensor 驱动代码结构
+ F: ^' x% L# U) z3 w" |+ T1 K7 ] Z, k) c% n0 k# i( J8 u
$(dir)\rk3128-source\kernel\drivers\input\sensors\accel\mma8452.c
\1 u8 H8 b" Z3 r' z) x: y4 e" { 从代码路径可以看出 G-sensor 驱动和 input,sensor 设备有莫大的关系。
5 `, g9 L4 b' E% z
2 O3 Y8 K& m6 |* A+ u
5 D4 N! T7 E* ]$ D% W6 O
图3
8 H* u; M% n. v# v $(dir)\rk3128-source\kernel\drivers\input\sensors\sensor-dev.c
. u9 y* C- _3 K% W --- sensor 设备注册,主要是注册 sensor,input 设备,解析 dts 配置文件0 I6 G; C% K+ N& K
$(dir)\rk3128-source\kernel\drivers\input\sensors\sensor-i2c.c; J$ x2 T Q+ ~
---sensor 的 I2c 相关处理
+ i7 S0 C$ l' v3 g& f0 [) s/ |, q& Y
第三节 实验代码
+ ^% l' z$ X+ o6 h! Q; u
% C) e8 H- v; @1.dts 修改: z* z% B7 [" _3 f- a5 E0 V
9 G, M+ g& f4 ]6 z1 f
8 s& O& G: `: n0 U0 k ~代码1
& @5 b% I. v" J$ D! m2.增加一个可以动态调节方向的测试函数如下(在 sensor-dev.c 中),用户可以通过adb shell 或者串口去输入数据完成屏幕方向调节的功能。" | q3 U. Y6 H0 `8 S9 l
, U* g" p! V9 H$ F6 p+ Z: ?. f2 p
7 m8 |' I9 N( f* E0 O# n
( G; b1 z" Q: g1 n8 g( L. m& z代码2: b( G. N( z6 m" g4 a, S- U
3.输入命令格式
8 T/ D& h+ d- T5 R3 la.系统缺省的方向配置如下. U6 K9 r, a! {0 p
echo gsensor_class={1, 0, 0, 0, 1, 0, 0, 0, 1} > /sys/class/gsensor_class/orientation b.测试命令如下5 P$ t- a0 d& a4 l
echo gsensor_class={1, 0, 0, 0, 0, 1, 0, 1, 0} > /sys/class/gsensor_class/orientation- D& q: Y8 q3 O
8 ^- f$ i# a. r& m% i! Hecho gsensor_class={0, 1, 0, 1, 0, 0, 0, 0, 1} > /sys/class/gsensor_class/orientation
Z. a4 d4 y1 Q9 L, k8 c9 @* g4 K8 l5 @5 x& ?% M
echo gsensor_class={0, 1, 0, 0, 0, 1, 1, 0, 0} > /sys/class/gsensor_class/orientation
3 p5 ?' e2 M/ m: L4 X8 H' |8 M3 x; t3 z1 _7 D$ f$ N6 N
echo gsensor_class={0, 0, 1, 1, 0, 0, 0, 1, 0} > /sys/class/gsensor_class/orientation8 }5 d P$ Q9 k9 J
echo gsensor_class={0, 0, 1, 0, 1, 0, 1, 0, 0} > /sys/class/gsensor_class/orientation 2 f% J( {% E. _5 [
2 W m8 g1 I# C+ f
4.代码调试中遇到问题! s9 K& J# [8 k4 E& ]$ s
如果 gsensor_set_orientation_online()直接返回 0 或 1 而不是 count,会出现什么情况?为什么? 1 Z9 {2 s" }* P b" y
如果 echo gsensor_class={1, 0, 0, 0, 1, 0, 0, 0, 1} > /sys/class/gsensor_class/orientation 命令提示输入不生效,可以尝试输入 su 命令提高一下权限。在我们开发板上面, adb 默认是 root 的,所以 adb shell 之后,直接是 root 用户。可以用 su 切换,也可以不用切换。
/ ?! \4 V- |- g
0 v2 ]9 ~. N2 ^3 \2 a2 W第四节 实验步骤 --- GSENSOR 怎么调节方向
4 W) F9 X6 |# k0 y* @' `7 X, H5 g) c
一般 GSENSOR 芯片贴片的位置变了,变换坐标就要跟着调整。& x' d/ V A; J% R1 g4 v# {. l
我们 Gsensor 是贴片好了的,这个用户无法更改,但是用户可以模拟一下如果板子不平放而是竖着放,屏幕平放的情况看优酷,如果保证屏幕的正常显示。
8 t3 k: j; F' H3 J3 {
( Z: S3 [: ^/ H$ ?. M$ E, ~第五节 实验现象7 f- [1 S2 }. N7 r! P
! y; Z% R+ y* K- [8 t% U9 Q6 G
开发板放置成如下图一方向,什么命令可以让屏幕横着播放视频?3 o8 b7 F4 G1 D3 p/ V# v8 \6 q
echo gsensor_class={-1, 0, 0, 0, -1, 0, 0, 0, -1} > /sys/class/gsensor_class/orientation
7 `: v P$ y4 \* A. N, }7 b$ v9 o- J 输入如上命令后,屏幕变了,如图二。
7 z X, Z) a# Y) N# ]; C# i1 Q$ [. T H' R
8 D6 {3 R. u, j$ f+ A图4
6 T3 b4 n) a4 O6 U( `# f
4 E z9 W$ ~6 `* p% w# f# C
* n6 @+ ^, V: f( @" ^' S
图5% e9 h5 A' Q a* r
) W6 O7 ]# i5 G; ?1 Y$ Y
+ A( O2 m# t# v3 n3 G6 m1 s$ j) S( C y
3 I; M5 b( E% X' W" O文件下载请点击:
9、G-sensor驱动实验教程.pdf
(631.95 KB, 下载次数: 0)
5 x4 {+ [4 I1 g9 E" @
( Z. `$ v) g8 ^7 k8 `7 g |
|