导语:ULM300BOX接收端与ULM300USB接收端两款产品无论是软件还是硬件都是基本类似的,ULM300BOX是在ULM300USB基础上升级的,所以整体思想是在做测试夹具时尽量能照搬ULM300USB的测试环境(整个测试软硬件平台)
一、测试夹具中主要用到的测试点#
- 测试点主要有9个,JTAG烧写程序的五个点(VCC、GND、RST、SWDAT、SWCLK)、I2C传输数据的两个点(SDA、SCL)、供电点(VBUS、GND)。
- 上位机测试时使用JTAG的点控制待测试板一步一步进行(类似于MDK中使用JTAG线单步调试),供应商在调试时说过有用到I2C线来传输数据和程序(因为IA2E芯片无RAM无法存储程序)但在我们的产品中IA2E的程序存储于MCU(GD32F150)芯片中,这两个点是否有实际作用还有待观察。
- ULM300USB通过USB接头供电(VBUS、GND两根线),ULM300USB需要测试音频,通过AOUT、GND两个根线来传输音频数据到电脑,这样接ULM300USB的USB接头就需要4根线(VBUS、GND、AOUT、GND0),但是ULM300BOX只需要VBUS、GND两根线来供电即可
二、ULM300USB测试程序与ULM300BOX硬件匹配问题#
ULM300USB和ULM300BOX硬件的差异如下。
- 以上两者之间原理图的不同原因在于:ULM300USB使用(PA10、PA11、PA12)这几个脚去实现USB的功能,ULM300BOX使用(PA9、PA10、PA11、PA12)这几个脚去控制74HC595点亮LED的功能。
- 产生的问题:若直接在ULM300BOX板中使用ULM300USB的测试程序,实际程序认为的控制原理图就如图ULM300USB.PNG所示,那很可能74HC595与MCU相互连接的线路上有高低电平使得D+、D-之间的差模电压引起USB中断,这样程序会一直进入USB中断,这样测试将无法完成。
- 解决的方法,如ULM300BOX.PNG红色部分所示,在D+处连接电脑74HC595一端加一个测试点TP,在夹具中连接这TP点的顶针接地,这样就破坏了USB数据的中断,74HC595所在面板返回的电平将无法产生USB中断了,测试程序就能正常的运行
三、测试程序的改动#
- 原则上可以通过修改ULM300USB的测试程序来解决以上USB中断的问题
int main( void )
{
RCC->AHBENR |= RCC_AHBENR_GPIOFEN | RCC_AHBENR_GPIOCEN | RCC_AHBENR_GPIOBEN | RCC_AHBENR_GPIOAEN;
Button_Init(); // pull-up on button input
UID = Get_UID();
USB_Interrupts_Config();
LED_Init();
LED_SetMode( LED_OFF );
I2C_Init();
IA2E_PowerUp();
SetSysClock();
while( !IA2E_Boot_Complete );
// only required here for I2S operation; USB runs this upon Alt.Set.1
Stream_Init();
Stream_Start( I2S );
USB_Init();
while( 1 ) {
// if( GPIOA->IDR & ( 1 << PIN_SW ) ) {
if( Button_Event == ( BTN_PAIRING | LONG_PRESS ) ) {
Button_Event = 0;
// LED_SetMode( LED_OFF );
SYNIC_Pairing( ENABLE );
// #ifdef _HMS1_
// TIM14->CCER |= TIM_CCER_CC1E;
// #else
// TIM15->BDTR |= TIM_BDTR_MOE;
// #endif
// Stream_Attn = 0;
// } else {
/* } else if( Button_Event == ( BTN_PAIRING | SHORT_RELEASE ) ) {
Button_Event = 0;
// LED_SetMode( LED_ACTIVE );
SYNIC_Pairing( DISABLE );
// #ifdef _HMS1_
// TIM14->CCER &= ~TIM_CCER_CC1E;
// #else
// TIM15->BDTR &= ~TIM_BDTR_MOE;
// #endif
// Stream_Attn = ( 60 / 6 ) << 6;
// SYNIC_Pairing( ENABLE );
// while( !( GPIOA->IDR & ( 1 << PIN_SW ) ) );
// SYNIC_Pairing( DISABLE );
*/ }
}
}
- 如上程序源代码,把
USB_Interrupts_Config();
和USB_Init();
两行代码屏蔽掉即可,目前的问题是此项目经过多人接手,测试代码的源程序没找到。