本帖最后由 流浪小子 于 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定义
/*************************************母头A面所用IO****************************************/
  • uint16_t        gblpFemaleAPin[13] = {GPIO_Pin_14, GPIO_Pin_15, GPIO_Pin_11, GPIO_Pin_12, GPIO_Pin_13, GPIO_Pin_2,
  •                                                                                                 GPIO_Pin_3, GPIO_Pin_4, GPIO_Pin_5, GPIO_Pin_6, GPIO_Pin_1, GPIO_Pin_8,  GPIO_Pin_6 };
  • GPIO_TypeDef *        gblpFemaleAPort[13] = {GPIOB, GPIOB, GPIOD, GPIOD, GPIOD, GPIOG,GPIOG,
  •                                                                                                                                 GPIOG, GPIOG, GPIOG, GPIOD, GPIOG, GPIOC};
  • /*************************************母头B面所用IO****************************************/        
  • uint16_t        gblpFemaleBPin[12] = {GPIO_Pin_6, GPIO_Pin_5, GPIO_Pin_4, GPIO_Pin_15, GPIO_Pin_14, GPIO_Pin_7,  
  •                                                                                                 GPIO_Pin_15, GPIO_Pin_5, GPIO_Pin_11, GPIO_Pin_12, GPIO_Pin_13,  GPIO_Pin_14 };
  • GPIO_TypeDef *        gblpFemaleBPort[12] = {GPIOD, GPIOD, GPIOD, GPIOD, GPIOD, GPIOD,GPIOG,
  •                                                                                                                                 GPIOB, GPIOG, GPIOG, GPIOG, GPIOG};
  • /*************************************公头A面所用IO****************************************/                                                                                                                                
  • uint16_t        gblpMaleAPin[13] = {GPIO_Pin_12, GPIO_Pin_13, GPIO_Pin_8, GPIO_Pin_0, GPIO_Pin_15, GPIO_Pin_10,
  •                                                                                                 GPIO_Pin_13, GPIO_Pin_12, GPIO_Pin_11, GPIO_Pin_1, GPIO_Pin_0, GPIO_Pin_0,  GPIO_Pin_1 };
  • GPIO_TypeDef *        gblpMaleAPort[13] = {GPIOB, GPIOB, GPIOD, GPIOG, GPIOF, GPIOD,GPIOF,
  •                                                                                                                                 GPIOF, GPIOF, GPIOB, GPIOB, GPIOF, GPIOF};
  • /*************************************公头B面所用IO****************************************/               
  • uint16_t        gblpMaleBPin[12] = {GPIO_Pin_6, GPIO_Pin_5, GPIO_Pin_4, GPIO_Pin_13, GPIO_Pin_3, GPIO_Pin_2,  
  •                                                                                                 GPIO_Pin_1, GPIO_Pin_0, GPIO_Pin_5, GPIO_Pin_4, GPIO_Pin_6,  GPIO_Pin_2 };
  • GPIO_TypeDef *        gblpMaleBPort[12] = {GPIOA, GPIOA, GPIOA, GPIOC, GPIOC, GPIOC,GPIOC,
  •                                                                                                                                 GPIOC, GPIOF, GPIOF, GPIOE, GPIOF};                        
  • /************************************通路测试所用IO****************************************/                                
  • uint16_t        gblpFAConnectPin[4] = {GPIO_Pin_6, GPIO_Pin_8, GPIO_Pin_5, GPIO_Pin_4};
  • GPIO_TypeDef *        gblpFAConnectPort[4] = {GPIOC, GPIOG, GPIOG, GPIOG};
  • uint16_t        gblpFBConnectPin[3] = {GPIO_Pin_5, GPIO_Pin_15, GPIO_Pin_7};
  • GPIO_TypeDef *        gblpFBConnectPort[3] = {GPIOB, GPIOG, GPIOD};
  • 复制代码
    短路测试部分代码
    for(i=0; i<12; i++)
  •         {
  •                 GPIO_InitStructure.GPIO_Pin = gblpFemaleAPin[i];
  •                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  •                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  •                 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  •                 GPIO_Init(gblpFemaleAPort[i], &GPIO_InitStructure);        
  •                 GPIO_WriteBit(gblpFemaleAPort[i], gblpFemaleAPin[i], Bit_SET);
  •                 for(l=i+1; l<13; l++)
  •                 {
  •                         if(GPIO_ReadInputDataBit(gblpFemaleAPort[l], gblpFemaleAPin[l]))
  •                         {
  •                                 printf("FA%d = FA%d    ", 12-i,12-l);
  •                                 if(i==0 && l==11)
  •                                         aFlag |= 0x8000;
  •                                 else if(i==3 && l==8)
  •                                         aFlag |= 0x4000;
  •                                 else
  •                                         aFlag |= 0x2000;
  •                                 
  •                                 aFlag++;
  •                         }
  •                         Delay_ms(2);
  •                 }               
  •                 GPIO_InitStructure.GPIO_Pin = gblpFemaleAPin[i];
  •                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  •                 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
  •                 GPIO_Init(gblpFemaleAPort[i], &GPIO_InitStructure);        
  •                 GPIO_WriteBit(gblpFemaleAPort[i], gblpFemaleAPin[i], Bit_RESET);
  •         }        
  •         if((aFlag&0xE000) == 0xC000)
  •         {
  •                 printf("PASS\r\n");
  •                 flag |= 0x01;
  •         }        
  •         else
  •         {
  •                 printf("Failed\r\n");
  •         }
  • 复制代码
    通过测试部分代码
    GPIO_InitStructure.GPIO_Pin = gblpFAConnectPin[2];
  •         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  •         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  •         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  •         GPIO_Init(gblpFAConnectPort[2], &GPIO_InitStructure);        
  •         GPIO_WriteBit(gblpFAConnectPort[2], gblpFAConnectPin[2], Bit_SET);
  •         if(GPIO_ReadInputDataBit(gblpMaleAPort[3], gblpMaleAPin[3])  &&
  •                 GPIO_ReadInputDataBit(gblpMaleAPort[8], gblpMaleAPin[8]) &&
  •                 GPIO_ReadInputDataBit(gblpMaleBPort[3], gblpMaleBPin[3]) &&
  •                 GPIO_ReadInputDataBit(gblpMaleBPort[8], gblpMaleBPin[8]))
  •         {
  •                 printf("FA4 = MA4 = MA9 = MB4 = MB9    ");
  •                 aFlag |= 0x0004;
  •         }
  •         GPIO_InitStructure.GPIO_Pin = gblpFAConnectPin[2];
  •         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  •         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
  •         GPIO_Init(gblpFAConnectPort[2], &GPIO_InitStructure);        
  •         GPIO_WriteBit(gblpFAConnectPort[2], gblpFAConnectPin[2], Bit_RESET);
  • 复制代码

    运行结果

    2.png



    附上原代码: MTY_TestCable_V1.rar (451.58 KB, 下载次数: 10)
    全部回复 6
    • 117 主题
    • 401 帖子
    • 1262 积分
    身份:LV4 高级技术员
    E币:810
    好大一个MCU
    他的点评
    发表于 2021-1-6 17:54
    • 131 主题
    • 389 帖子
    • 1549 积分
    身份:LV4 高级技术员
    E币:1099

    多亏它大,不然没那么多IO口
    他的点评
    发表于 2021-1-6 19:11
    • 117 主题
    • 401 帖子
    • 1262 积分
    身份:LV4 高级技术员
    E币:810
    流浪小子 发表于 2021-1-6 17:54
    多亏它大,不然没那么多IO口

    怎么需要那么多的io呢?
    他的点评
    发表于 2021-1-6 19:30
    • 131 主题
    • 389 帖子
    • 1549 积分
    身份:LV4 高级技术员
    E币:1099
    moyanming2013 发表于 2021-1-6 19:11
    怎么需要那么多的io呢?

    公母的各24+1pin都需要测啊
    他的点评
    发表于 2021-1-7 13:43
    • 117 主题
    • 401 帖子
    • 1262 积分
    身份:LV4 高级技术员
    E币:810
    • 1045 主题
    • 4603 帖子
    • 20061 积分
    身份:LV8 高级工程师
    E币:5299
    学习了





    欢迎点击


    论坛> >机器人/工业电子> >工业电子与自动化


    https://mbb.eet-china.com/forum/topic/85437_1_1.html




    回复楼主
    您需要登录后才可以评论 登录 立即注册