|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
G-sensor 驱动实验教程
/ j9 P. R7 [6 ~/ `/ V7 C0 J N9 D, W4 r6 L W R9 B1 g
: x3 i0 g3 p4 Q
( o7 T6 j% l! b第一节 引言 --- G-sensor 电路原理图详解
5 }+ P. {' x1 S3 l) B. h- ^" S, s- |8 j- \
下图来源于文档 3128_sdk_a02_20170325.pdf 中第 2 页和第 12 页。
) \! g$ k; o4 K 如下两张图可以确定 G-sensor 是通过 I2c 与 cpu 相互通信的,cpu 作为主设备,G-sensor 作为从设备。因为 cpu 的 I2c 不仅仅与 G-sensor 相连,它连接了多个 I2c 从设备,并且通过从设备地址来确定当前和哪个从设备通信。! l2 b, ?2 k3 H5 @5 i! @
& N- }6 l* d6 R2 c& l! u9 ^
. T7 h _1 C: Y8 x$ e7 ? z3 E图1
. J' G* M, ]) e
* k* H7 k" x7 J0 d
$ F' X& e) b1 U3 ^图2- y0 h& y$ H1 p1 h
1 p, b$ ?: ~2 X3 J( ^) b
第二节 G-sensor 驱动代码结构
; x/ M+ a9 X" ~/ E4 z$ {; v8 n7 | [
$(dir)\rk3128-source\kernel\drivers\input\sensors\accel\mma8452.c
" ^+ n0 V5 w) Y8 p. t1 t. W" I3 |8 J 从代码路径可以看出 G-sensor 驱动和 input,sensor 设备有莫大的关系。" ^; R4 V2 W4 q. l2 y
2 J, X3 p( v. o$ k0 o- K, D5 [; y0 M
) u7 \9 n' z$ Q% m图3
% n6 |1 }$ O$ M) M5 t $(dir)\rk3128-source\kernel\drivers\input\sensors\sensor-dev.c
2 N1 ]1 C. X9 f6 r% I4 e --- sensor 设备注册,主要是注册 sensor,input 设备,解析 dts 配置文件
; L. I; Z* L" h $(dir)\rk3128-source\kernel\drivers\input\sensors\sensor-i2c.c
) q) u) h R' n/ t6 n6 H' w6 { ---sensor 的 I2c 相关处理0 p$ p; }0 z1 I9 g( d- q
. D) E; N& b: e. s0 g0 G; V( n第三节 实验代码: X+ D- }* U& ^
3 J9 }$ ` V7 p/ H! }
1.dts 修改:# ~' w9 Y1 d# q% k( m1 S! o
/ c- Z, ]+ W7 k# B; H
6 e2 s l% |* U& J: L0 T. v代码15 z" V" O" _! a4 M/ g. l
2.增加一个可以动态调节方向的测试函数如下(在 sensor-dev.c 中),用户可以通过adb shell 或者串口去输入数据完成屏幕方向调节的功能。" f7 g8 N( G" a
( D2 i4 R* t/ Z6 u6 R6 E4 x; A, ]
2 \% G6 k# F# L6 W$ e
! _, g) C) y! X; Y; A" B# l3 e6 m代码2) L, |. ^+ W H/ r
3.输入命令格式. _# S9 W( g2 c# Y
a.系统缺省的方向配置如下
% ~; B1 G+ @* f: a3 s. B- ]echo gsensor_class={1, 0, 0, 0, 1, 0, 0, 0, 1} > /sys/class/gsensor_class/orientation b.测试命令如下; V" r1 V( d l& O% s
echo gsensor_class={1, 0, 0, 0, 0, 1, 0, 1, 0} > /sys/class/gsensor_class/orientation
! Q4 z6 u! m# D2 e
0 ?% \7 ]8 R5 k5 Aecho gsensor_class={0, 1, 0, 1, 0, 0, 0, 0, 1} > /sys/class/gsensor_class/orientation" A# W0 g0 A. N; a
# Q! W4 i" a* p0 x3 T- Z* ^echo gsensor_class={0, 1, 0, 0, 0, 1, 1, 0, 0} > /sys/class/gsensor_class/orientation
1 d' k! T8 ^/ F- S8 M, l2 k9 }" [- f6 d% f
echo gsensor_class={0, 0, 1, 1, 0, 0, 0, 1, 0} > /sys/class/gsensor_class/orientation7 @: @& x) L& t" m
echo gsensor_class={0, 0, 1, 0, 1, 0, 1, 0, 0} > /sys/class/gsensor_class/orientation # h( h, U$ r! ?9 A" P7 U8 L* I
. [9 K9 n) `# O* D
4.代码调试中遇到问题. g1 z$ F& E/ Q# i/ G
如果 gsensor_set_orientation_online()直接返回 0 或 1 而不是 count,会出现什么情况?为什么? - V7 A' Q0 y# E$ e% H; r! U
如果 echo gsensor_class={1, 0, 0, 0, 1, 0, 0, 0, 1} > /sys/class/gsensor_class/orientation 命令提示输入不生效,可以尝试输入 su 命令提高一下权限。在我们开发板上面, adb 默认是 root 的,所以 adb shell 之后,直接是 root 用户。可以用 su 切换,也可以不用切换。
" ]; ^6 a6 D3 k
+ n4 N$ d1 ~# b9 L1 W% Z" U: R% Q第四节 实验步骤 --- GSENSOR 怎么调节方向
, O8 K( H1 f5 Z- U$ h: Z2 T- R( a$ M1 y" X6 J% q
一般 GSENSOR 芯片贴片的位置变了,变换坐标就要跟着调整。# |) @/ X+ z. s) K, [5 ]1 q
我们 Gsensor 是贴片好了的,这个用户无法更改,但是用户可以模拟一下如果板子不平放而是竖着放,屏幕平放的情况看优酷,如果保证屏幕的正常显示。
% b% i: Y" \0 k- S5 x. r; B1 `3 ~
第五节 实验现象
6 p% H/ `' F3 Z7 J. S
2 l5 X( _$ {, u* m 开发板放置成如下图一方向,什么命令可以让屏幕横着播放视频?
- Z* g" H" S5 c& C echo gsensor_class={-1, 0, 0, 0, -1, 0, 0, 0, -1} > /sys/class/gsensor_class/orientation
% K9 _: P- E& z& o& z# H0 ^ 输入如上命令后,屏幕变了,如图二。
" x, t% U" j* }3 _* X
. j- B5 x" E$ u9 l0 s
. X( k! l2 a/ l" y图4
( m+ { C ^+ Q
' X% D6 w& `! k- N2 v
# `8 G# c$ O5 z8 ]" c
图5
: M* \9 T) V3 x) B7 C/ C3 M. Y) q
% l- U* U$ \3 ]- x' v8 w2 D# p3 \, C! _: S) q: {. a4 ]' L9 X
1 \7 ~2 w* u1 P/ x/ x
4 m3 J B& p: w) |- E: f: H
文件下载请点击:
9、G-sensor驱动实验教程.pdf
(631.95 KB, 下载次数: 0)
+ b( z7 d" q# g+ z: f* p, n- y# _6 N: M- m9 }# D& Z) }# l6 j& D5 h9 P0 E
|
|