当前位置: 首页 > news >正文

wince车机刷系统_城会玩!一顿折腾给奥迪Q5车机加装AV视频输入成功玩上坦克大战...

文章为原作者折腾捣鼓之后创作,有一定参考价值,欢迎交流学习。全文共2193字,配图共25张,预计阅读需要5-10分钟!

在北京大柳树鬼市买的七寸DVD导航车机,20元。买回来接电源开机,发现卡在logo不动,奥迪Q5的。估计是第三方机器

9b70404b0a57b131bb24f8aca284e820.png

找遍网络没找到这款机器的资料,当时买的时候以为是安卓系统,有视频等输入,结果发现竟然是wince系统,视频输入是lvds数字式的。

bbeffb8ee9dfb24d72a7ca06f740ac05.png

心想,翻车了呗!拆开看了一下, 还是比较复杂,主控红色核心板,其他ic一大堆。

b92d1d93b95e1570e6372e0cb97eebf7.png
46f08bd4d1ddd0b2cffbb5f031ed1b04.png

内部情况

b21d4cdd1f431e80e83ed7c5c51c9d02.png

大致梳理了一下机器的ic和结构。惊喜的发现,TFT屏幕驱动芯片tw8816支持模拟信号输入。模拟信号支持复合视频,色差,RGB,可惜没有引出。

查了一下芯片的pdf,应该做适当的设置,就可以改成av输入信号了

28aae4df0b999e243b8ebd47894a3d9d.png

大致分析了一下电路结构。该机分两块电路板,下面一块是soc核心板和tft驱动(B板),上面一块是各种电源,音频,单片机,接口(A板)等等。

lvds串行数字信号从A板输入,然后接到B板通过max9218,将lvds转成并行dtv数据,然后接入到tw8816的dtv数字电视并行接口中。tw8816再处理成tft lcd的驱动信号。

27db80bf9bfb4488e86896fa48708c41.png

A板

672dd0aeed2a4d3ed2c018cae290f62c.png

B板

其中核心板的wince系统直接可以驱动lcd,tw8816的lcd驱动和核心板的lcd驱动通过两片fst16233进行切换。也就是用户选择是显示lvds的视频还是wince的视频。

为了让屏幕显示tw8816的内容,直接短接fst16233信号切换引脚到地,强制选择从tw8816的信号作为lcd驱动

216d8e8471bcf717cc63606ed2980282.png

接下来结合芯片资料,摸索着焊接了i2c接口线和av复合视频输入线,并在视频输入上串上了75欧姆阻抗电阻和耦合电容,接上了莲花头,找了台红白机作为视频信号源

c06583613693661c24afc156631b3b2a.png

引出的单片机和莲花头:

f08865a5f132d26aeba2b66c4ba0abe4.png

由于tw8816中有大量关于tft lcd屏幕参数的设定,然而我并不想详细了解。既然机器能开启并显示奥迪logo,就说明tw8816中的各种设置是OK的。要做的就是读出来就行了

ae28abe4bf3d59006d6563450dc5de90.png

TW8816大概有几百个寄存器,分成256两页:

6e1215e65a53373b45538e7c100c2c5b.png

通过跑线路,tw8816的i2c总线来自于A板上的一颗STM8单片机,它对tw8816进行了寄存器的设置工作

用接口神器“Bus Pirate”接在tw8816的i2c接口上,然后进入i2c的嗅探模式。上电的一瞬间,所有i2c上的写入寄存器的操作全部拿下

8c283bc99a3c4d162591233d463e9e7e.png
834494e3058627e5c64cb38164e6f347.png

bus pirate界面:

3630e910b3511ef26e5f1c416ca7ca6a.png

嗅探到的i2c通讯内容:

5aacc97befa24e54ff3b7fe9e2647625.png

用“Bus Pirate”尝试了一下操作I2C向tw8816的寄存器写入内容,读取内容都没问题。于是开始参照手册设置一些寄存器的内容,以便能支持模拟信号输入

通过不懈的努力,最终需要对输入选择,输入信号格式,各种缩放,边距等寄存器的设置。最终让接入的av信号,正常的显示在了屏幕正中

这个时候,A板的唯一的用途就是上面的stm8单片机向B板的tw8816做寄存器设置,以及一些12v转5v。如果去掉A板,用一片单片机取代,然后直接在B板输入5V应该就可以做到的

为了验证这个想法,需要自己先用脱离A板的单片机,手动设置几百个寄存器的值。看看是否可行

手动设置的工作量太大,这个时候也不可能直接就上单片机编程。于是就用神器“Bus Pirate”的python库来实现

下图是python环境jupyter-nb的界面:

f69a2e6e4432a1ad9b2fffa73e883f10.png
b4877a3532ffef38fdf06059b8648b40.png

大概就是用电脑操作“Bus Pirate”,写入所有寄存器的值。python很方便易用,是俺的主要编程工具之一。几下就完成了验证工作。验证的结果就是,脱离了A板单片机,直接通过“Bus Pirate”的i2c向tw8816设置寄存器后,画面可以正确显示。

但过程中有一些插曲,去掉A板后发现背光不亮,结果发现是还有屏幕12V的背光供电控制,直接接地即可亮屏。另外就是设置完所有寄存器后还是白屏,折腾一天发现是VGH VGL电压没出来进屏幕。这个也是受控于A板的,直接找到这部分电压驱动,飞线强行启动。

脱离A板和B板的排线:

d5283731af0c7b0781597edf000e697d.png

脱离A板后,拆下B板上的核心板和蓝牙模块用不上了:

8b9b591aa215a9020b25aff1712405ca.png

下一步就是单片机编程了。程序功能简单,就是写一堆数据到i2c就行了

随便找了一片8脚的pic单片机pic12f675,网上找了一个gpio模拟i2c的程序

把从“Bus Pirate”嗅探到的数据,改成C语言的格式,编程二维数组。tw8816的寄存器几百个, 分成两个page。写到变量page00和page01中。其中二维数组第一个元素表示寄存器号,第二个是值。比如const char page00[][2]={ {0x00,0x22},{0x01,0x83},

表示0号寄存器内容0x22,1号寄存器内容0x83

2387fa974a98a2d619250a780b8e6943.png

为了让程序美观(主要是显摆俺的C语言功底),用指向二维数组的指针的数组const char (*page_buff[])[2]={page01,page00};来进行两页数据循环写入。这样写可以方便的进行page和额外数据组的添加。

3cec8f57d74de6068f90b34346be8556.png

程序主要部分(因为二维数组指针数组的数据定义很好,所以程序简洁美观):

0f5c0bdeaa9a87faf9622f3fddefca91.png

一阵调试,烧写,测试,改程序的漫长过程之后。这片pic单片机开机上电就对tw8816进行设置。一阵操作猛如虎,画面完美呈现!

57308010ecc6993c305e851f2bff2d7e.png

所有电路和软件方面的验证工作都OK了,下一步就是装回和改外壳等常规操作了,估计一两天后再进行!本文完!


谢谢观看!

浏览更多精彩内容请登录数码之家网站

技术交流请联系原作者

作者:orsonzou

本文来源:数码之家

相关文章:

  • 2007,走好长征路!
  • c++开发工程师是属于前端还是后端_编程第一课 了解软件开发过程和程序员的工作...
  • 专业手机游戏开发基础(1)
  • tcp只发送不接收会怎样_面试TCP协议灵魂拷问十二个(建议收藏)
  • 专业手机游戏开发基础(2)
  • c++ string类的常用方法_String类型及其常用方法(2)
  • anaconda rstudio安装后打不开_spyder打不开 安装anaconda 的tips
  • 任正非:实事求是的科研方向与二十年的艰苦努力(新年推荐)
  • 为什么使用依赖注入_一起来踩踩 Spring 中这个循环依赖的坑
  • 一个由CVS不区分大小导致的404问题
  • springboot profile_SpringBoot-基础
  • 设置列表框最小宽度且可随着内容变宽的方法
  • ajax怎么讲json对象传到后台_【JavaWeb】102:后台数据校验
  • 零基础学sql要多久_从零基础到独当一面的化妆师需要学多久?
  • hibernate的一个异常错误分析
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【剑指offer】让抽象问题具体化
  • 【面试系列】之二:关于js原型
  • CSS居中完全指南——构建CSS居中决策树
  • css选择器
  • ES6语法详解(一)
  • Linux后台研发超实用命令总结
  • Python连接Oracle
  • python学习笔记-类对象的信息
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • v-if和v-for连用出现的问题
  • 分布式熔断降级平台aegis
  • 简单基于spring的redis配置(单机和集群模式)
  • 力扣(LeetCode)56
  • 一个完整Java Web项目背后的密码
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​linux启动进程的方式
  • #git 撤消对文件的更改
  • #Lua:Lua调用C++生成的DLL库
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • **PHP分步表单提交思路(分页表单提交)
  • ..回顾17,展望18
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET MVC第三章、三种传值方式
  • .NET 依赖注入和配置系统
  • .NET 中的轻量级线程安全
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .NetCore部署微服务(二)
  • .Net环境下的缓存技术介绍
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • @Autowired @Resource @Qualifier的区别
  • @PreAuthorize注解