3055
- 收藏
- 点赞
- 分享
- 举报
有什么办法能知道已经做好的电路板,某个引脚连接到芯片哪个GPIO
本帖最后由 ngswfx 于 2017-12-10 11:31 编辑
我这边通常使用别人家的板子,开发东西,或者做自己的产品,主要时解码以及矩阵键盘之类的。
有时候配合比较好的厂家,通常会告诉我他们的epprom加密芯片或者喇叭蜂鸣器连接的主芯片的引脚,或者某个led灯的引脚,或者板子上某些GPIO引出和芯片的连接引脚
但有些时候,厂家找不到了,因为有些硬件时临时接手过来的,研发都跑路了,产品已经无法维护,但客户可能手上压了一些货,需要跑程序,通常这类小单子客户啥都提供不了,都是市场人员,3520D这一类封装到问题不大,遇到3536 3535 3798这一类的芯片,就傻眼了,某些功能不是做不出来,是因为没时间去研究具体的引脚。
但有些时候,例如加密的唯一号读取,等等比较重要的,还是有必要的,但这个东西,一般大家都接到i2c了,通常不会用gpio模拟,相对来说还有个范围,可以碰运气,但喇叭以及其他的GPIO,就没法弄了。
/////////////////////////////////////////
不知道海思那里有没有这种工具,可以直接运行一个程序,我只要将某个引脚规律拉高拉低,然后那个探测程序就可以告诉我,具体的引脚。
//原理上讲的确不难,主要自己写一个有点麻烦,功能实现机制倒是感觉不难,主要是每种芯片的某些引脚的偏移地址等,不太一样,每次遇到一个新的芯片,为了实现这个功能,可能需要导入大量的配置。通常由于某些功能已经确定,例如HDMI输出,SATA硬盘,VI输入等已知确定的部分,那些引脚不可能作为gpio使用了,因为板子上必须要使用这些功能,剩下的gpio口通常也不多了,估计不会超过100个可用,
//大概流程如下:
首先让芯片进入rootfs系统,然后运行这个程序,这个程序,按照列表,快速探测所有GPIO口,并记录目前状态,当发现状态改变,printf出改变引脚的序号即可
而硬件部分,就是把引脚焊接出来,弄个小电路,不按就是拉低,按下就是拉高,然后就看printf的结果,即便由于其他因素,有很多gpio号输出,多次测试后,也可以判断出到底这个引脚是哪个gpio号,这样就可以实现具体的软件功能了
//我感觉主要是折腾一个可用GPIO列表的时间要长于写这个程序的时间,所以有点发怵。
例如:采用ini配置列表
[GPIO_8_6]
offset_address=0x004 //偏移地址
GPIO_MODE_=0x01//一般都是01时GPIO工作模式
然后就是定义一个结构将这个信息都装载好,让程序首先将所有ini列表中的引脚,都开始GPIO工作模式,然后就是读取识别即可
//某个引脚结构
typedef struct
{
int nGPIO_Num;
int nGPIO_Num2;
int nGPIO_MODE;
int nGPIO_offset;
int nLastState;
int nCurState;
}GPIO_LIST;
#define MAX_GPIO_LIST 200
GPIO_LIST gpioList[MAX_GPIO_LIST];
//基地址这类的,某个芯片的某组GPIO都是固定的,就弄另外一个结构存放即可
typedef struct
{
int nBaseAddr;
..........
............
}GPIO_BASE;
//ini配置
[GPIO_BASE_0]
nBaseAddr=0x00000000
//////////////////////////////////////
大概思路就是这样,不知道有没有相关工具可以干这个事,或者大家有没有什么思路
///////////////////////////////////////////////////
扩展功能设想,好像可以利用这个工具判断出ipc模组,某个开关引脚,例如红外灯,IRCUT这些引脚的实际GPIO口,也可以判断出硬件电路板是否硬件线路异常
我这边通常使用别人家的板子,开发东西,或者做自己的产品,主要时解码以及矩阵键盘之类的。
有时候配合比较好的厂家,通常会告诉我他们的epprom加密芯片或者喇叭蜂鸣器连接的主芯片的引脚,或者某个led灯的引脚,或者板子上某些GPIO引出和芯片的连接引脚
但有些时候,厂家找不到了,因为有些硬件时临时接手过来的,研发都跑路了,产品已经无法维护,但客户可能手上压了一些货,需要跑程序,通常这类小单子客户啥都提供不了,都是市场人员,3520D这一类封装到问题不大,遇到3536 3535 3798这一类的芯片,就傻眼了,某些功能不是做不出来,是因为没时间去研究具体的引脚。
但有些时候,例如加密的唯一号读取,等等比较重要的,还是有必要的,但这个东西,一般大家都接到i2c了,通常不会用gpio模拟,相对来说还有个范围,可以碰运气,但喇叭以及其他的GPIO,就没法弄了。
/////////////////////////////////////////
不知道海思那里有没有这种工具,可以直接运行一个程序,我只要将某个引脚规律拉高拉低,然后那个探测程序就可以告诉我,具体的引脚。
//原理上讲的确不难,主要自己写一个有点麻烦,功能实现机制倒是感觉不难,主要是每种芯片的某些引脚的偏移地址等,不太一样,每次遇到一个新的芯片,为了实现这个功能,可能需要导入大量的配置。通常由于某些功能已经确定,例如HDMI输出,SATA硬盘,VI输入等已知确定的部分,那些引脚不可能作为gpio使用了,因为板子上必须要使用这些功能,剩下的gpio口通常也不多了,估计不会超过100个可用,
//大概流程如下:
首先让芯片进入rootfs系统,然后运行这个程序,这个程序,按照列表,快速探测所有GPIO口,并记录目前状态,当发现状态改变,printf出改变引脚的序号即可
而硬件部分,就是把引脚焊接出来,弄个小电路,不按就是拉低,按下就是拉高,然后就看printf的结果,即便由于其他因素,有很多gpio号输出,多次测试后,也可以判断出到底这个引脚是哪个gpio号,这样就可以实现具体的软件功能了
//我感觉主要是折腾一个可用GPIO列表的时间要长于写这个程序的时间,所以有点发怵。
例如:采用ini配置列表
[GPIO_8_6]
offset_address=0x004 //偏移地址
GPIO_MODE_=0x01//一般都是01时GPIO工作模式
然后就是定义一个结构将这个信息都装载好,让程序首先将所有ini列表中的引脚,都开始GPIO工作模式,然后就是读取识别即可
//某个引脚结构
typedef struct
{
int nGPIO_Num;
int nGPIO_Num2;
int nGPIO_MODE;
int nGPIO_offset;
int nLastState;
int nCurState;
}GPIO_LIST;
#define MAX_GPIO_LIST 200
GPIO_LIST gpioList[MAX_GPIO_LIST];
//基地址这类的,某个芯片的某组GPIO都是固定的,就弄另外一个结构存放即可
typedef struct
{
int nBaseAddr;
..........
............
}GPIO_BASE;
//ini配置
[GPIO_BASE_0]
nBaseAddr=0x00000000
//////////////////////////////////////
大概思路就是这样,不知道有没有相关工具可以干这个事,或者大家有没有什么思路
///////////////////////////////////////////////////
扩展功能设想,好像可以利用这个工具判断出ipc模组,某个开关引脚,例如红外灯,IRCUT这些引脚的实际GPIO口,也可以判断出硬件电路板是否硬件线路异常
我来回答
回答7个
时间排序
认可量排序
认可0
认可0
认可0
认可0
认可0
认可0
认可0
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币
Markdown 语法
- 加粗**内容**
- 斜体*内容*
- 删除线~~内容~~
- 引用> 引用内容
- 代码`代码`
- 代码块```编程语言↵代码```
- 链接[链接标题](url)
- 无序列表- 内容
- 有序列表1. 内容
- 缩进内容
- 图片![alt](url)
相关问答
-
132020-11-11 18:27:41
-
2019-02-27 15:31:13
-
2015-06-18 19:55:29
-
2016-12-05 10:49:01
-
2018-06-07 10:59:20
-
2018-06-21 10:56:00
-
2021-05-07 14:46:16
-
2018-12-11 10:08:21
-
2018-12-12 09:37:07
-
2017-12-18 21:52:13
-
2020-12-04 14:34:55
-
2018-04-19 17:39:51
-
2018-04-19 17:37:17
-
2017-07-20 09:39:39
-
2019-11-18 09:45:45
-
2016-08-31 08:23:53
-
2008-07-29 12:59:42
-
2021-01-26 17:48:45
-
2020-08-13 17:26:54
无更多相似问答 去提问
点击登录
-- 积分
-- E币
提问
—
收益
—
被采纳
—
我要提问
切换马甲
上一页
下一页
悬赏问答
-
50帮忙解决个交叉编译的问题
-
20帮忙交叉编译个源码
-
5Hi3516CV610 如何使用SD卡升级固件
-
5cat /dev/logmpp 报错 <3>[ vi] [func]:vi_send_frame_node [line]:99 [info]:vi pic queue is full!
-
50如何获取vpss chn的图像修改后发送至vo
-
5FPGA通过Bt1120传YUV422数据过来,vi接收不到数据——3516dv500
-
50SS928 运行PQtools 拼接 推到设备里有一半画面会异常
-
53536AV100的sample_vdec输出到CVBS显示
-
10海思板子mpp怎么在vi阶段改变视频数据尺寸
-
10HI3559AV100 多摄像头同步模式
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
提醒
你的问题还没有最佳答案,是否结题,结题后将扣除20%的悬赏金
取消
确认
提醒
你的问题还没有最佳答案,是否结题,结题后将根据回答情况扣除相应悬赏金(1回答=1E币)
取消
确认