Part Number: TMS320F2800157
Other Parts Discussed in Thread: LM5066H,
Hi C2000 Team,
I am configuring the PMBUSA peripheral on TMS320F2800157 in Controller (Master) Mode to communicate with an LM5066H target device. However, I am encountering an issue where both SDA and SCL lines immediately latch LOW (0V) as soon as PMBus_enableModule(PMBUSA_BASE) is executed.
Hardware & Schematic Details:
-
SDA Pin: GPIO44
-
SCL Pin: GPIO35
-
SMBA Pin: GPIO37
-
External Pull-ups: 2.2kOhm pull-up on both SDA and SCL lines; 10kOhm pull-up on SMBA.
-
Bus Line State: When PMBus is disabled (or before PMBus_enableModule), both SDA and SCL lines measure 3.3V with a multimeter.
Software Configuration:
void Setup_PMBus(void)
{
// 1. Enable Peripheral Clock
SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_PMBUSA);
// 2. Configure PinMux & Pad Config
GPIO_setPinConfig(GPIO_44_PMBUSA_SDA);
GPIO_setDirectionMode(PMBUS_SDA_PIN, GPIO_DIR_MODE_IN);
GPIO_setPadConfig(PMBUS_SDA_PIN, GPIO_PIN_TYPE_OD);
GPIO_setQualificationMode(PMBUS_SDA_PIN, GPIO_QUAL_ASYNC);
GPIO_setPinConfig(GPIO_35_PMBUSA_SCL);
GPIO_setDirectionMode(PMBUS_SCL_PIN, GPIO_DIR_MODE_IN);
GPIO_setPadConfig(PMBUS_SCL_PIN, GPIO_PIN_TYPE_OD);
GPIO_setQualificationMode(PMBUS_SCL_PIN, GPIO_QUAL_ASYNC);
// 3. Reset & Clock Setup
PMBus_disableModule(PMBUSA_BASE);
PMBus_disableI2CMode(PMBUSA_BASE);
PMBus_deassertAlertLine(PMBUSA_BASE);
uint32_t moduleFreq = PMBus_configModuleClock(PMBUSA_BASE, PMBUS_MODULE_FREQ_MAX, DEVICE_SYSCLK_FREQ);
PMBus_configBusClock(PMBUSA_BASE, PMBUS_CLOCKMODE_STANDARD, moduleFreq);
PMBus_initControllerMode(PMBUSA_BASE);
PMBus_setTargetAddress(PMBUSA_BASE, LM5066H_SLAVE_ADDR);
// 4. Enable Module
PMBus_enableModule(PMBUSA_BASE);
}
Diagnostic & Register Inspection:
-
PinMux Verification:
Checked
GPBMUX1in CCS Registers view:GPIO44 = 10andGPIO35 = 10(MUX selection for PMBUSA is confirmed correct). -
Clock Calculation:
DEVICE_SYSCLK_FREQ=120MHz.moduleFreqreturns20000000(20MHz), which is valid forPMBUS_MODULE_FREQ_MAX. -
Thanh ghi
PMBSTS(Status Register) right afterPMBus_enableModule():-
PMBSTS=0x00042100(or0x0004B110) -
SCL_RAW=0 -
SDA_RAW=0 -
BUS_FREE=1(prior to enable) -
UNIT_BUSY=1 -
CLK_LOW_TIMEOUT=1
-
Questions:
-
What could cause the PMBus hardware state machine to pull SDA and SCL LOW immediately upon un-resetting (
PMBUS_RESET = 0), despite lines being physically pulled up to 3.3V beforehand? -
Is there a required sequence, delay, or register lock/unlock (
EALLOW) step that I might be missing between PinMux/PadConfig setting and clearingPMBUS_RESET? -
Why would
SCL_RAWandSDA_RAWreport0as soon as the peripheral exits reset?
Thanks in advance for your support!