diff --git a/lib/KSDK_2.0_MK22FN512xxx12 b/lib/KSDK_2.0_MK22FN512xxx12 index 7142722..9fbf2bb 160000 --- a/lib/KSDK_2.0_MK22FN512xxx12 +++ b/lib/KSDK_2.0_MK22FN512xxx12 @@ -1 +1 @@ -Subproject commit 7142722eed9452c07fd88c7e3c9a41b1ca002059 +Subproject commit 9fbf2bbf085a065a96fb6b2db11d03c3112bf7ba diff --git a/right/src/init_peripherals.c b/right/src/init_peripherals.c index ec586c9..60afeb7 100644 --- a/right/src/init_peripherals.c +++ b/right/src/init_peripherals.c @@ -16,7 +16,8 @@ #include "usb_api.h" #include "slave_scheduler.h" -uint32_t I2cMainBusBaudRateBps = I2C_MAIN_BUS_BAUD_RATE; +uint32_t I2cMainBusRequestedBaudRateBps = I2C_MAIN_BUS_BAUD_RATE; +uint32_t I2cMainBusActualBaudRateBps; void InitInterruptPriorities(void) { @@ -81,9 +82,10 @@ void initI2cMainBus(void) i2c_master_config_t masterConfig; I2C_MasterGetDefaultConfig(&masterConfig); - masterConfig.baudRate_Bps = I2cMainBusBaudRateBps; + masterConfig.baudRate_Bps = I2cMainBusRequestedBaudRateBps; uint32_t sourceClock = CLOCK_GetFreq(I2C_MAIN_BUS_CLK_SRC); I2C_MasterInit(I2C_MAIN_BUS_BASEADDR, &masterConfig, sourceClock); + I2cMainBusActualBaudRateBps = I2C_ActualBaudRate; } void ReinitI2cMainBus(void) diff --git a/right/src/init_peripherals.h b/right/src/init_peripherals.h index 0fb5a0e..747e6cd 100644 --- a/right/src/init_peripherals.h +++ b/right/src/init_peripherals.h @@ -7,7 +7,8 @@ // Variables: - extern uint32_t I2cMainBusBaudRateBps; + extern uint32_t I2cMainBusRequestedBaudRateBps; + extern uint32_t I2cMainBusActualBaudRateBps; // Functions: diff --git a/right/src/usb_commands/usb_command_get_device_property.c b/right/src/usb_commands/usb_command_get_device_property.c index 9760e7a..1d847fb 100644 --- a/right/src/usb_commands/usb_command_get_device_property.c +++ b/right/src/usb_commands/usb_command_get_device_property.c @@ -4,6 +4,9 @@ #include "eeprom.h" #include "versions.h" #include "slave_drivers/kboot_driver.h" +#include "i2c.h" +#include "init_peripherals.h" +#include "fsl_i2c.h" version_t deviceProtocolVersion = { DEVICE_PROTOCOL_MAJOR_VERSION, @@ -59,6 +62,11 @@ void UsbCommand_GetDeviceProperty(void) case DevicePropertyId_CurrentKbootCommand: GenericHidOutBuffer[1] = KbootDriverState.command; break; + case DevicePropertyId_I2cMainBusBaudRate: + GenericHidOutBuffer[1] = I2C_MAIN_BUS_BASEADDR->F; + SetUsbTxBufferUint32(2, I2cMainBusRequestedBaudRateBps); + SetUsbTxBufferUint32(6, I2cMainBusActualBaudRateBps); + break; default: SetUsbTxBufferUint8(0, UsbStatusCode_GetDeviceProperty_InvalidProperty); break; diff --git a/right/src/usb_commands/usb_command_get_device_property.h b/right/src/usb_commands/usb_command_get_device_property.h index f063c52..8225ccb 100644 --- a/right/src/usb_commands/usb_command_get_device_property.h +++ b/right/src/usb_commands/usb_command_get_device_property.h @@ -8,7 +8,8 @@ DevicePropertyId_ProtocolVersions = 1, DevicePropertyId_ConfigSizes = 2, DevicePropertyId_CurrentKbootCommand = 3, - } system_property_t; + DevicePropertyId_I2cMainBusBaudRate = 4, + } device_property_t; typedef enum { UsbStatusCode_GetDeviceProperty_InvalidProperty = 2, diff --git a/right/src/usb_commands/usb_command_set_i2c_baud_rate.c b/right/src/usb_commands/usb_command_set_i2c_baud_rate.c index 548e851..acb9eb7 100644 --- a/right/src/usb_commands/usb_command_set_i2c_baud_rate.c +++ b/right/src/usb_commands/usb_command_set_i2c_baud_rate.c @@ -1,10 +1,11 @@ #include "usb_protocol_handler.h" #include "usb_commands/usb_command_set_i2c_baud_rate.h" #include "init_peripherals.h" +#include "fsl_i2c.h" void UsbCommand_SetI2cBaudRate(void) { uint32_t i2cBaudRate = GetUsbRxBufferUint32(1); - I2cMainBusBaudRateBps = i2cBaudRate; + I2cMainBusRequestedBaudRateBps = i2cBaudRate; ReinitI2cMainBus(); }