PCB 板 制作 HDMI 转 LCD 驱动板 树莓派 I2C 写 EDID
最开始的时候,一直是用洞洞板在diy ,简单的电路还能应付一下,复杂的电路不行。现在是贴片的时代,关于画板软件,也学了好几个,每个软件都有各自的优点。
Proteus 8
以前也发过博文,介绍过,防真也可以,仅使用过 原理图绘制、仿真。
Pads 9.5
公司的同事喜欢用这个,一些方案商提供的原理图也是使用这个软件画的,从来没有收到过律师函。
Altium Designer 简称 AD
经常会收到律师函,慎用,软件 低的版本 如 AD 9 ,功能较少,没有批量打孔的功能,包地打孔,极作标。
KiCad
开源的 EDA 软件,可以支持多种操作系统,ubuntu , mac os , windows ,软件一直在快速迭代开发中,功能日渐完善中。
PCB 设计的关键点:
1,芯片选型
功能满足要求,资料丰富,价格便宜,供货稳定,外围电路简单
2,尺寸大小
根据大小选择不同的板层和封装,4层比2层容易,电源可以走内层,更小的封装可以将pcb 设计的更小
3,原理图绘制
根据产品需求和芯片数据手册,绘制原理图,没有找到封装的,需要提前画封装或才下载别人画好的
4,pcb 绘制
原理图绘制正常,检查无错误了以后,开始进行 pcb 绘制
a, 确定板层和元件步局,需要考虑 EMI 电磁干扰 ,温度散热,电源网络分隔
b, 配置 规则,线与线之间的距离,最小线粗,差分对建立,过孔规则,焊盘连接规则,根据 板厂生成 能力来进行配置,一般 线距是 6mil ,过孔内径最小是 8mil ,一般的板厂都可以生产。
c, 走线,先放置较大的芯片,然后按功能开始走线,线比较多的提前走,像是 IO 总线之类的 8pin 16pin ,可以利用批量走线功能,这样走出来比较美观
d, 优化走线,线全部走完以后,需要进行优化,以前走的不好的可以重新走,或是元件放置的位置,重新微调
e, 包地处理,有的信号线比较重要,像是 晶振 或是 差分走线 需要在外面画一根地线,在打上孔
f, 覆铜,每层进行覆铜处理,选中去除死铜
g, 添加泪滴
h, drc 检查,检查 开路,短路,未连接的网络,间距,字符等
i, 输出 gerber ,需要生成gerber 和 钻孔 ipc 也可以提供
发给板厂,生产。
免费下载 原理图和 pcb 封装的网站 https://www.snapeda.com/
项目需求:原来是 BeagleBone 开发板 + 投影开发板
是公司以前预研的项目用到的,做一个投影时钟。
投影开发板 TI 官网介绍
BeagleBone 的性能太弱,看个网页都卡,想改装为 HDMI 转接出来,底板还需要一组 I2C 控制,所以添加了一个常用的 stm32f103 开发比较简单,还支持 freeRTOS
BeagleBone https://beagleboard.org/
HDMI 转换芯片选型 TI 的 TFP401APZP,https://www.ti.com/store/ti/zh/p/product/?p=TFP401APZP
其它HDMI 转换芯片也不少,国产的找 datasheet 也找不到。
工厂下单中
回板了,先焊上 stm32f103 swd 下载一个测试点灯固件
boot0 boot1 跳线选择 boot 1 时,使用 串口可以下载。
画错的地方:
1,24c02 封装画错了
sop 画成了 ssop 只能手工修复下,点胶固定
2,电源过孔打的过少了
按一个过孔 500ma
3,四周的螺丝孔忘了打
设计:
1,双 3.3v 电源设计
2,散热加大焊盘
3,EMI 设计,晶振包地处理
4,差分走线,包地处理
HDMI 接口说明:
4组差分信号 R0 R1 R2 CLK
I2C SCL SDA 用于 EDID 读取
HPD 当连接上以后,由低电平向高电平变化时,表示 设备就续,开始从 I2C 读取 EDID 信息
5V 由主机供电,电流不大,有的 HDMI 转 VGA 的可以从这里取电
HDMI 也可以用来传输触摸信号,这里没有用到
DEID 读取,主机通过 I2C 读取,显示设备上的 24c02 中存储的 EDIE 信息。
android 查看 连接的 HDMI EDID 信息(也适用于 ubuntu )
rk3399_all:# ls /sys/class/drm card0 card0-DP-1 card0-DSI-1 card0-HDMI-A-1 controlD64 renderD128 version 查看显示设备 rk3399_all:# ls /sys/class/drm/card0-HDMI-A-1 audioformat device edid mode power subsystem content_protection dpms enabled modes status uevent 查看里面的内容 rk3399_all:# cat /sys/class/drm/card0-HDMI-A-1/edid > /sdcard/hdmi_asus_edid 导出 EDID 信息 adb pull /sdcard/hdmi_asus_edid
ASUS 27 2K 显示器
HP 20 1080P 显示器
三星19寸显示器 HDMI 转 VGA 的,是透传的
EDID 介绍
1.3 128Byte 2.0 256Byte
包含了有关显示器及其性能的参数,包括供应商信息、最大图像大小、颜色设置、厂商预设置、频率范围的限制以及显示器名和序列号的字符串
编辑的软件
Phoenix EDID Designer 显示器EDID编辑器 不好用,打开导出的 edid .bin 解析失败
Deltacast E-EDID Editor 显示不全
HDMI EDID Generator v1.4 比较好用
根据树莓派的配置进行配置
hdmi_timings=854 0 14 4 12 480 0 2 3 9 0 0 0 60 0 32000000 3
接口说明:
D0-D23 RGB 24 pin 888 数据线
VSYNC HSYNC 水平 垂直 同步信号
PCLK 时钟 ---> ODCK
DATAEN 数据使能 ---> DE
EXT_SCL EXT_SDA i2c 控制信号
VINTF
PROJ_ON_EXT
HOST_PRESENTZ
GPIO5
GPIO_INIT_DONE
在 树莓派上 调试 i2c 控制
启用 i2c 功能
sudo raspi-config 3 Interface Options Configure connections to peripherals P5 I2C Enable/disable automatic loading of I2C kernel module Would you like the ARM I2C interface to be enabled? <是> The ARM I2C interface is enabled <确定> sudo reboot i2cdetect -l i2c-1 i2c bcm2835 (i2c@7e804000) I2C adapter 连接 HDML 转接板 I2C 接口 上面的 AT24C02 pi@raspberrypi:~ $ i2cdetect -r -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: 50 51 52 53 54 55 56 57 -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- 读取一堆 pi@raspberrypi:~ $ i2cdump -y 1 0x50 No size specified (using byte-data access) 0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef 00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 读取 pi@raspberrypi:~ $ i2cget -y 1 0x50 0 b 0x00 写入数据 pi@raspberrypi:~ $ i2cset -y 1 0x50 0 0x12 b pi@raspberrypi:~ $ i2cget -y 1 0x50 0 0x12在 0x50 设备上 0 地址开始写入 0x01 0x02 pi@raspberrypi:~ $ i2ctransfer 1 w3@0x50 0x0 0x01 0x02 pi@raspberrypi:~ $ i2cdump -y 1 0x50 No size specified (using byte-data access) 0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef 00: 01 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ??.............. 写入 EDID 24C16 每次可以最大写入 16 Byte 设备地址 0x50 数据地址 0x0 长度 256 i2ctransfer -y 1 w17@0x50 0x00 0x00 0xff 0xff 0xff 0xff 0xff 0xff 0x00 0x4c 0x2d 0x11 0x09 0x44 0x46 0x55 0x5a i2ctransfer -y 1 w17@0x50 0x10 0x14 0x17 0x01 0x03 0xa0 0x29 0x1a 0x78 0x2a 0x80 0xc5 0xa6 0x57 0x49 0x9b 0x23 i2ctransfer -y 1 w17@0x50 0x20 0x12 0x50 0x54 0xbf 0xee 0x80 0x71 0x4f 0x81 0xc0 0x81 0x00 0x95 0x0f 0x01 0x01 i2ctransfer -y 1 w17@0x50 0x30 0x01 0x01 0x01 0x01 0x01 0x01 0x9a 0x29 0xa0 0xd0 0x51 0x84 0x22 0x30 0x50 0x98 i2ctransfer -y 1 w17@0x50 0x40 0x36 0x00 0x98 0xff 0x10 0x00 0x00 0x1c 0x00 0x00 0x00 0xfd 0x00 0x38 0x4b 0x1e i2ctransfer -y 1 w17@0x50 0x50 0x51 0x0e 0x00 0x0a 0x20 0x20 0x20 0x20 0x20 0x20 0x00 0x00 0x5f 0xfc 0x00 0x53 i2ctransfer -y 1 w17@0x50 0x60 0x31 0x39 0x42 0x33 0x30 0x30 0x0a 0x20 0x20 0x20 0x20 0x20 0x00 0x00 0x00 0xff i2ctransfer -y 1 w17@0x50 0x70 0x00 0x48 0x34 0x4c 0x44 0x30 0x30 0x30 0x30 0x30 0x31 0x0a 0x20 0x20 0x01 0x03 i2ctransfer -y 1 w17@0x50 0x80 0x02 0x03 0x1b 0x62 0x23 0x09 0x7f 0x07 0x83 0x01 0x00 0x00 0x67 0x03 0x0c 0x00 i2ctransfer -y 1 w17@0x50 0x90 0x20 0x00 0x80 0x2d 0x43 0x01 0x10 0x84 0xe2 0x00 0x0f 0x00 0x00 0x36 0x00 0x40 i2ctransfer -y 1 w17@0x50 0xa0 0xe8 0x63 0x00 0x00 0x1a 0x1a 0x1d 0x00 0x80 0x51 0xd0 0x1c 0x20 0x40 0x80 0x35 i2ctransfer -y 1 w17@0x50 0xb0 0x00 0x40 0x84 0x63 0x00 0x00 0x1c 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 i2ctransfer -y 1 w17@0x50 0xc0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 i2ctransfer -y 1 w17@0x50 0xd0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 i2ctransfer -y 1 w17@0x50 0xe0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 i2ctransfer -y 1 w17@0x50 0xf0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x15 pi@raspberrypi:~/Desktop $ i2cdump -y 1 0x50 No size specified (using byte-data access) 0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef 00: 00 ff ff ff ff ff ff 00 4c 2d 11 09 44 46 55 5a ........L-??DFUZ 10: 14 17 01 03 a0 29 1a 78 2a 80 c5 a6 57 49 9b 23 ?????)?x*???WI?# 20: 12 50 54 bf ee 80 71 4f 81 c0 81 00 95 0f 01 01 ?PT???qO???.???? 30: 01 01 01 01 01 01 9a 29 a0 d0 51 84 22 30 50 98 ???????)??Q?"0P? 40: 36 00 98 ff 10 00 00 1c 00 00 00 fd 00 38 4b 1e 6.?.?..?...?.8K? 50: 51 0e 00 0a 20 20 20 20 20 20 00 00 5f fc 00 53 Q?.? .._?.S 60: 31 39 42 33 30 30 0a 20 20 20 20 20 00 00 00 ff 19B300? .... 70: 00 48 34 4c 44 30 30 30 30 30 31 0a 20 20 01 03 .H4LD000001? ?? 80: 02 03 1b 62 23 09 7f 07 83 01 00 00 67 03 0c 00 ???b#?????..g??. 90: 20 00 80 2d 43 01 10 84 e2 00 0f 00 00 36 00 40 .?-C????.?..6.@ a0: e8 63 00 00 1a 1a 1d 00 80 51 d0 1c 20 40 80 35 ?c..???.?Q?? @?5 b0: 00 40 84 63 00 00 1c 00 00 00 00 00 00 00 00 00 .@?c..?......... c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 15 ...............? EDID 写入成功
像素格式
DLP投影板
401 功能配置,另外需要 I2C 配置一下:
i2cset -y 1 0x1b 0x0b 0x00 0x00 0x00 0x00 i
i2cset -y 1 0x1b 0x0c 0x00 0x00 0x00 0x1b i
使用逻辑分析仪连接 ODCK DE 查看输出是否正常
接到树莓派 HDMI 上开始调试,显示出来4个树莓,显示有点问题,调试中。
调好了,《爱捉弄的高木同学 第3季》 面白い