diff --git a/workspace/TS100/Core/BSP/Miniware/Software_I2C.h b/workspace/TS100/Core/BSP/Miniware/Software_I2C.h index 73242ff4..9fc62d5d 100644 --- a/workspace/TS100/Core/BSP/Miniware/Software_I2C.h +++ b/workspace/TS100/Core/BSP/Miniware/Software_I2C.h @@ -18,7 +18,7 @@ #define SOFT_SDA_LOW() HAL_GPIO_WritePin(SDA2_GPIO_Port, SDA2_Pin, GPIO_PIN_RESET) #define SOFT_SDA_READ() (HAL_GPIO_ReadPin(SDA2_GPIO_Port,SDA2_Pin)==GPIO_PIN_SET?1:0) #define SOFT_SCL_READ() (HAL_GPIO_ReadPin(SCL2_GPIO_Port,SCL2_Pin)==GPIO_PIN_SET?1:0) -#define SOFT_I2C_DELAY() {for(int xx=0;xx<100;xx++){asm("nop");}} +#define SOFT_I2C_DELAY() {for(int xx=0;xx<40;xx++){asm("nop");}} #endif diff --git a/workspace/TS100/Core/BSP/Miniware/fusb302b.cpp b/workspace/TS100/Core/BSP/Miniware/fusb302b.cpp index 78533cce..0a3fbd2d 100644 --- a/workspace/TS100/Core/BSP/Miniware/fusb302b.cpp +++ b/workspace/TS100/Core/BSP/Miniware/fusb302b.cpp @@ -149,7 +149,7 @@ void fusb_setup() { GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - HAL_NVIC_SetPriority(EXTI9_5_IRQn, 10, 0); + HAL_NVIC_SetPriority(EXTI9_5_IRQn, 12, 0); HAL_NVIC_EnableIRQ(EXTI9_5_IRQn); if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) { @@ -157,12 +157,10 @@ void fusb_setup() { return; } } - /* Fully reset the FUSB302B */ - fusb_write_byte( FUSB_RESET, FUSB_RESET_SW_RES); - osDelay(2); if (!fusb_read_id()) { return; } + /* Turn on all power */ fusb_write_byte( FUSB_POWER, 0x0F); @@ -181,21 +179,14 @@ void fusb_setup() { fusb_write_byte( FUSB_CONTROL1, FUSB_CONTROL1_RX_FLUSH | FUSB_CONTROL1_ENSOP2 | FUSB_CONTROL1_ENSOP1); - resetWatchdog(); /* Measure CC1 */ fusb_write_byte( FUSB_SWITCHES0, 0x07); - resetWatchdog(); osDelay(10); - resetWatchdog(); uint8_t cc1 = fusb_read_byte( FUSB_STATUS0) & FUSB_STATUS0_BC_LVL; - resetWatchdog(); /* Measure CC2 */ - resetWatchdog(); fusb_write_byte( FUSB_SWITCHES0, 0x0B); - resetWatchdog(); osDelay(10); - resetWatchdog(); uint8_t cc2 = fusb_read_byte( FUSB_STATUS0) & FUSB_STATUS0_BC_LVL; /* Select the correct CC line for BMC signaling; also enable AUTO_CRC */ @@ -206,7 +197,6 @@ void fusb_setup() { fusb_write_byte( FUSB_SWITCHES1, 0x26); fusb_write_byte( FUSB_SWITCHES0, 0x0B); } - resetWatchdog(); if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) { I2CBB::unlock2(); } diff --git a/workspace/TS100/Core/Drivers/FUSB302/policy_engine.cpp b/workspace/TS100/Core/Drivers/FUSB302/policy_engine.cpp index 5084f1ea..a9da67bb 100644 --- a/workspace/TS100/Core/Drivers/FUSB302/policy_engine.cpp +++ b/workspace/TS100/Core/Drivers/FUSB302/policy_engine.cpp @@ -171,7 +171,7 @@ PolicyEngine::policy_engine_state PolicyEngine::pe_sink_wait_cap() { } /* If we got reset signaling, transition to default */ if (evt & PDB_EVT_PE_RESET) { - return PESinkTransitionDefault; + return PESinkWaitCap; } /* If we're too hot, we shouldn't negotiate power yet */ if (evt & PDB_EVT_PE_I_OVRTEMP) { @@ -187,22 +187,22 @@ PolicyEngine::policy_engine_state PolicyEngine::pe_sink_wait_cap() { && PD_NUMOBJ_GET(&tempMessage) > 0) { /* First, determine what PD revision we're using */ if ((hdr_template & PD_HDR_SPECREV) == PD_SPECREV_1_0) { - /* If the other end is using at least version 3.0, we'll - * use version 3.0. */ - if ((tempMessage.hdr & PD_HDR_SPECREV) >= PD_SPECREV_3_0) { - hdr_template |= PD_SPECREV_3_0; - /* Otherwise, use 2.0. Don't worry about the 1.0 case - * because we don't have hardware for PD 1.0 signaling. */ - } else { - hdr_template |= PD_SPECREV_2_0; - } +// /* If the other end is using at least version 3.0, we'll +// * use version 3.0. */ +// if ((tempMessage.hdr & PD_HDR_SPECREV) >= PD_SPECREV_3_0) { +// hdr_template |= PD_SPECREV_3_0; +// /* Otherwise, use 2.0. Don't worry about the 1.0 case +// * because we don't have hardware for PD 1.0 signaling. */ +// } else { + hdr_template |= PD_SPECREV_2_0; +// } } return PESinkEvalCap; /* If the message was a Soft_Reset, do the soft reset procedure */ } evt = 0; } - return PESinkWaitCap; //unknown message == soft reset + return PESinkWaitCap; //wait for more messages? } diff --git a/workspace/TS100/Core/Drivers/I2CBB.cpp b/workspace/TS100/Core/Drivers/I2CBB.cpp index 77410676..b878db58 100644 --- a/workspace/TS100/Core/Drivers/I2CBB.cpp +++ b/workspace/TS100/Core/Drivers/I2CBB.cpp @@ -27,12 +27,7 @@ void I2CBB::init() { I2CSemaphore2 = xSemaphoreCreateBinaryStatic(&xSemaphoreBuffer2); unlock(); unlock2(); - //unstick bus -// start(); -// for (int i = 0; i < 8; i++) { -// read_bit(); -// } -// stop(); + } bool I2CBB::probe(uint8_t address) {