流浪小子

  • 132 主题
  • 355 帖子
  • 1454 积分
  • 身份:版主
  • E币:721

【原创】DIY之Typec测试

2021-1-6 17:19:17 显示全部楼层
本帖最后由 流浪小子 于 2021-1-6 17:46 编辑

背景
1.png

搞了这么个玩意儿,因为Typec的24个引脚焊盘都引出来了,为保证质量,要进行测量,从而保证其该通的通,该断的断。时间紧,没办法,看手上有F4的开发板,索性就用它来DIY了

需求
4.png

如图所示,因24个引脚中,只用了 VCC, GND, DP, DN, CC1, CC2 7个信号,外加一个外壳,所以通路只需确认这7路即可。短路就简单了,不该短的别短的就OK了。

原理
首先将公头和母座的24个脚加外壳,一共25个引脚分别引出来接到IO口上。
  • 短路测试:将1个pin设为输出高电平,其余pin设为输入并依次读取,如果为高即为短路。因AB面短路的可能性极低,也懒的搞,所以A面只测A面,B面只测B面
  • 通路测试:根据电路图,只测所有相连引脚,同样将1个pin设为输出高电平,其余设为输入并依次读取,如果为高即为通路

硬件制作
某宝上买了24引脚加外壳都引出来的测试板,然后焊线接到开发板的IO口上。直接上图
3.jpg

看着很乱是吧,本来线就多,还用错线了,也懒的再重新焊了,就加了下转接。

软件编程
着急用, 怎么简单就怎么来了,代码直接堆,IO口接一个填一个
所用IO定义
  1. /*************************************母头A面所用IO****************************************/
  2. uint16_t        gblpFemaleAPin[13] = {GPIO_Pin_14, GPIO_Pin_15, GPIO_Pin_11, GPIO_Pin_12, GPIO_Pin_13, GPIO_Pin_2,
  3.                                                                                                 GPIO_Pin_3, GPIO_Pin_4, GPIO_Pin_5, GPIO_Pin_6, GPIO_Pin_1, GPIO_Pin_8,  GPIO_Pin_6 };
  4. GPIO_TypeDef *        gblpFemaleAPort[13] = {GPIOB, GPIOB, GPIOD, GPIOD, GPIOD, GPIOG,GPIOG,
  5.                                                                                                                                 GPIOG, GPIOG, GPIOG, GPIOD, GPIOG, GPIOC};
  6. /*************************************母头B面所用IO****************************************/        
  7. uint16_t        gblpFemaleBPin[12] = {GPIO_Pin_6, GPIO_Pin_5, GPIO_Pin_4, GPIO_Pin_15, GPIO_Pin_14, GPIO_Pin_7,  
  8.                                                                                                 GPIO_Pin_15, GPIO_Pin_5, GPIO_Pin_11, GPIO_Pin_12, GPIO_Pin_13,  GPIO_Pin_14 };
  9. GPIO_TypeDef *        gblpFemaleBPort[12] = {GPIOD, GPIOD, GPIOD, GPIOD, GPIOD, GPIOD,GPIOG,
  10.                                                                                                                                 GPIOB, GPIOG, GPIOG, GPIOG, GPIOG};

  11. /*************************************公头A面所用IO****************************************/                                                                                                                                
  12. uint16_t        gblpMaleAPin[13] = {GPIO_Pin_12, GPIO_Pin_13, GPIO_Pin_8, GPIO_Pin_0, GPIO_Pin_15, GPIO_Pin_10,
  13.                                                                                                 GPIO_Pin_13, GPIO_Pin_12, GPIO_Pin_11, GPIO_Pin_1, GPIO_Pin_0, GPIO_Pin_0,  GPIO_Pin_1 };
  14. GPIO_TypeDef *        gblpMaleAPort[13] = {GPIOB, GPIOB, GPIOD, GPIOG, GPIOF, GPIOD,GPIOF,
  15.                                                                                                                                 GPIOF, GPIOF, GPIOB, GPIOB, GPIOF, GPIOF};
  16. /*************************************公头B面所用IO****************************************/               
  17. uint16_t        gblpMaleBPin[12] = {GPIO_Pin_6, GPIO_Pin_5, GPIO_Pin_4, GPIO_Pin_13, GPIO_Pin_3, GPIO_Pin_2,  
  18.                                                                                                 GPIO_Pin_1, GPIO_Pin_0, GPIO_Pin_5, GPIO_Pin_4, GPIO_Pin_6,  GPIO_Pin_2 };
  19. GPIO_TypeDef *        gblpMaleBPort[12] = {GPIOA, GPIOA, GPIOA, GPIOC, GPIOC, GPIOC,GPIOC,
  20.                                                                                                                                 GPIOC, GPIOF, GPIOF, GPIOE, GPIOF};                        

  21. /************************************通路测试所用IO****************************************/                                
  22. uint16_t        gblpFAConnectPin[4] = {GPIO_Pin_6, GPIO_Pin_8, GPIO_Pin_5, GPIO_Pin_4};
  23. GPIO_TypeDef *        gblpFAConnectPort[4] = {GPIOC, GPIOG, GPIOG, GPIOG};
  24. uint16_t        gblpFBConnectPin[3] = {GPIO_Pin_5, GPIO_Pin_15, GPIO_Pin_7};
  25. GPIO_TypeDef *        gblpFBConnectPort[3] = {GPIOB, GPIOG, GPIOD};
短路测试部分代码
  1. for(i=0; i<12; i++)
  2.         {
  3.                 GPIO_InitStructure.GPIO_Pin = gblpFemaleAPin[i];
  4.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  5.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  6.                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  7.                 GPIO_Init(gblpFemaleAPort[i], &GPIO_InitStructure);        
  8.                 GPIO_WriteBit(gblpFemaleAPort[i], gblpFemaleAPin[i], Bit_SET);
  9.                 for(l=i+1; l<13; l++)
  10.                 {
  11.                         if(GPIO_ReadInputDataBit(gblpFemaleAPort[l], gblpFemaleAPin[l]))
  12.                         {
  13.                                 printf("FA%d = FA%d    ", 12-i,12-l);
  14.                                 if(i==0 && l==11)
  15.                                         aFlag |= 0x8000;
  16.                                 else if(i==3 && l==8)
  17.                                         aFlag |= 0x4000;
  18.                                 else
  19.                                         aFlag |= 0x2000;
  20.                                 
  21.                                 aFlag++;
  22.                         }
  23.                         Delay_ms(2);
  24.                 }               
  25.                 GPIO_InitStructure.GPIO_Pin = gblpFemaleAPin[i];
  26.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  27.                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
  28.                 GPIO_Init(gblpFemaleAPort[i], &GPIO_InitStructure);        
  29.                 GPIO_WriteBit(gblpFemaleAPort[i], gblpFemaleAPin[i], Bit_RESET);
  30.         }        
  31.         if((aFlag&0xE000) == 0xC000)
  32.         {
  33.                 printf("PASS\r\n");
  34.                 flag |= 0x01;
  35.         }        
  36.         else
  37.         {
  38.                 printf("Failed\r\n");
  39.         }
通过测试部分代码
  1. GPIO_InitStructure.GPIO_Pin = gblpFAConnectPin[2];
  2.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  3.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  4.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  5.         GPIO_Init(gblpFAConnectPort[2], &GPIO_InitStructure);        
  6.         GPIO_WriteBit(gblpFAConnectPort[2], gblpFAConnectPin[2], Bit_SET);
  7.         if(GPIO_ReadInputDataBit(gblpMaleAPort[3], gblpMaleAPin[3])  &&
  8.                 GPIO_ReadInputDataBit(gblpMaleAPort[8], gblpMaleAPin[8]) &&
  9.                 GPIO_ReadInputDataBit(gblpMaleBPort[3], gblpMaleBPin[3]) &&
  10.                 GPIO_ReadInputDataBit(gblpMaleBPort[8], gblpMaleBPin[8]))
  11.         {
  12.                 printf("FA4 = MA4 = MA9 = MB4 = MB9    ");
  13.                 aFlag |= 0x0004;
  14.         }
  15.         GPIO_InitStructure.GPIO_Pin = gblpFAConnectPin[2];
  16.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  17.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
  18.         GPIO_Init(gblpFAConnectPort[2], &GPIO_InitStructure);        
  19.         GPIO_WriteBit(gblpFAConnectPort[2], gblpFAConnectPin[2], Bit_RESET);

运行结果

2.png



附上原代码: MTY_TestCable_V1.rar (451.58 KB, 下载次数: 7)

最新评论

楼层直达:

moyanming2013

  • 118 主题
  • 375 帖子
  • 1262 积分
  • 身份:LV4 高级技术员
  • E币:782

流浪小子

  • 132 主题
  • 355 帖子
  • 1454 积分
  • 身份:版主
  • E币:721
流浪小子 2021-1-6 17:54:15 显示全部楼层

多亏它大,不然没那么多IO口

点评

怎么需要那么多的io呢?  详情 回复 发表于 2021-1-6 19:11

moyanming2013

  • 118 主题
  • 375 帖子
  • 1262 积分
  • 身份:LV4 高级技术员
  • E币:782
moyanming2013 2021-1-6 19:11:57 显示全部楼层
流浪小子 发表于 2021-1-6 17:54
多亏它大,不然没那么多IO口

怎么需要那么多的io呢?

点评

公母的各24+1pin都需要测啊  详情 回复 发表于 2021-1-6 19:30
广告

流浪小子

  • 132 主题
  • 355 帖子
  • 1454 积分
  • 身份:版主
  • E币:721
流浪小子 2021-1-6 19:30:43 显示全部楼层
moyanming2013 发表于 2021-1-6 19:11
怎么需要那么多的io呢?

公母的各24+1pin都需要测啊

点评

厉害,144脚的应该满足了  详情 回复 发表于 2021-1-7 13:43

moyanming2013

  • 118 主题
  • 375 帖子
  • 1262 积分
  • 身份:LV4 高级技术员
  • E币:782

curton

  • 596 主题
  • 2749 帖子
  • 15148 积分
  • 身份:版主
  • 论坛新秀 灌水之王 优秀版主
  • E币:4431
快速回复
6
48
广告
关闭 热点推荐上一条 /5 下一条