Skip to content

Commit 992f502

Browse files
authored
Merge pull request #2973 from fpistm/fix_i3C
fix(i3c): minor changes
2 parents 42393da + 7007793 commit 992f502

67 files changed

Lines changed: 733 additions & 70 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎CI/update/stm32variant.py‎

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1478,6 +1478,25 @@ def i2c_pins_variant():
14781478
return dict(sda=sda_pin, scl=scl_pin)
14791479

14801480

1481+
def i3c_pins_variant():
1482+
sda_pin = scl_pin = "PNUM_NOT_DEFINED"
1483+
# Iterate to find match instance if any
1484+
for sda in i3csda_list:
1485+
sda_inst = sda[2].split("_", 1)[0]
1486+
for scl in i3cscl_list:
1487+
scl_inst = scl[2].split("_", 1)[0]
1488+
if sda_inst == scl_inst:
1489+
sda_pin = sda[0].replace("_", "", 1)
1490+
scl_pin = scl[0].replace("_", "", 1)
1491+
break
1492+
else:
1493+
continue
1494+
break
1495+
else:
1496+
print("No I3C found!")
1497+
return dict(sda=sda_pin, scl=scl_pin)
1498+
1499+
14811500
def serial_pins_variant():
14821501
# Manage (LP)U(S)ART pins
14831502
if uarttx_list:
@@ -1591,6 +1610,12 @@ def print_variant(generic_list, alt_syswkup_list):
15911610
# I2C definition
15921611
i2c_pins = i2c_pins_variant()
15931612

1613+
# I3C definition if any
1614+
if i3csda_list and i3cscl_list:
1615+
i3c_pins = i3c_pins_variant()
1616+
else:
1617+
i3c_pins = None
1618+
15941619
# Serial definition
15951620
serial = serial_pins_variant()
15961621

@@ -1660,6 +1685,8 @@ def print_variant(generic_list, alt_syswkup_list):
16601685
hal_modules_list.append("DAC")
16611686
if eth_list:
16621687
hal_modules_list.append("ETH")
1688+
if i3csda_list and i3cscl_list:
1689+
hal_modules_list.append("I3C")
16631690
if xspidata0_list:
16641691
if "OCTOSPI" in xspidata0_list[0][2]:
16651692
hal_modules_list.append("OSPI")
@@ -1681,6 +1708,7 @@ def print_variant(generic_list, alt_syswkup_list):
16811708
num_analog_inputs=len(analog_pins_list),
16821709
spi_pins=spi_pins,
16831710
i2c_pins=i2c_pins,
1711+
i3c_pins=i3c_pins,
16841712
timer=timer,
16851713
serial=serial,
16861714
hal_modules_list=hal_modules_list,

‎CI/update/templates/variant_generic.h‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,16 @@
7575
#ifndef PIN_WIRE_SCL
7676
#define PIN_WIRE_SCL {{i2c_pins.scl}}
7777
#endif
78+
{% if i3c_pins %}
79+
80+
// I3C definitions
81+
#ifndef PIN_I3C_SDA
82+
#define PIN_I3C_SDA {{i3c_pins.sda}}
83+
#endif
84+
#ifndef PIN_I3C_SCL
85+
#define PIN_I3C_SCL {{i3c_pins.scl}}
86+
#endif
87+
{% endif %}
7888

7989
// Timer Definitions
8090
// Use TIM6/TIM7 when possible as servo and tone don't need GPIO output pin

‎cores/arduino/stm32/stm32yyxx_hal_conf.h‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,6 @@
4646
#undef HAL_I2S_MODULE_ENABLED
4747
#endif
4848

49-
#if !defined(HAL_I3C_MODULE_DISABLED)
50-
#define HAL_I3C_MODULE_ENABLED
51-
#else
52-
#undef HAL_I3C_MODULE_ENABLED
53-
#endif
54-
5549
#if !defined(HAL_RTC_MODULE_DISABLED)
5650
#define HAL_RTC_MODULE_ENABLED
5751
#else
@@ -117,6 +111,12 @@
117111
#undef HAL_EXTI_MODULE_ENABLED
118112
#endif
119113

114+
#if !defined(HAL_I3C_MODULE_DISABLED)
115+
/*#define HAL_I3C_MODULE_ENABLED*/
116+
#else
117+
#undef HAL_I3C_MODULE_ENABLED
118+
#endif
119+
120120
#if !defined(HAL_ETH_MODULE_DISABLED)
121121
/*#define HAL_ETH_MODULE_ENABLED*/
122122
#else

‎libraries/I3C/examples/BasicBegin/BasicBegin.ino‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
// Choose the bus instance available on your board.
44

5-
#define I3C_BUS = I3C1Bus;
5+
#define I3C_BUS I3C1Bus
66

77
void setup() {
88
Serial.begin(115200);

‎libraries/I3C/examples/DeviceReady/DeviceReady.ino‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include <I3C.h>
22

3-
#define I3C_BUS = I3C1Bus;
3+
#define I3C_BUS I3C1Bus
44

55

66
void setup() {

‎libraries/I3C/src/I3C.cpp‎

Lines changed: 40 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -676,13 +676,13 @@ bool I3CBus::isI3CDeviceReady(uint8_t dynAddr, uint32_t trials, uint32_t timeout
676676
// Low-level CCC helpers
677677
// ============================================================================
678678

679-
int I3CBus::cccBroadcastWrite(uint8_t cccId,
679+
bool I3CBus::cccBroadcastWrite(uint8_t cccId,
680680
const uint8_t *data,
681681
uint16_t length,
682682
bool withDefByte,
683683
uint32_t timeout)
684684
{
685-
int result = -1;
685+
bool result = false;
686686

687687
if (_initialized) {
688688
uint32_t controlBuffer[0xFF];
@@ -712,11 +712,11 @@ int I3CBus::cccBroadcastWrite(uint8_t cccId,
712712
if (st == HAL_OK) {
713713
st = HAL_I3C_Ctrl_TransmitCCC(&_hi3c, &context, timeout);
714714
if (st == HAL_OK) {
715-
result = 0;
715+
result = true;
716716
} else {
717717
uint32_t err = HAL_I3C_GetError(&_hi3c);
718718
if ((err & HAL_I3C_ERROR_CE2) != 0U) {
719-
result = 0;
719+
result = true;
720720
}
721721
}
722722
}
@@ -725,14 +725,14 @@ int I3CBus::cccBroadcastWrite(uint8_t cccId,
725725
return result;
726726
}
727727

728-
int I3CBus::cccDirectWrite(uint8_t targetAddr,
728+
bool I3CBus::cccDirectWrite(uint8_t targetAddr,
729729
uint8_t cccId,
730730
const uint8_t *data,
731731
uint16_t length,
732732
bool withDefByte,
733733
uint32_t timeout)
734734
{
735-
int result = -1;
735+
bool result = false;
736736

737737
if (_initialized) {
738738
uint32_t controlBuffer[0xFF];
@@ -767,21 +767,21 @@ int I3CBus::cccDirectWrite(uint8_t targetAddr,
767767
if (st == HAL_OK) {
768768
st = HAL_I3C_Ctrl_TransmitCCC(&_hi3c, &context, timeout);
769769
if (st == HAL_OK) {
770-
result = 0;
770+
result = true;
771771
}
772772
}
773773
}
774774

775775
return result;
776776
}
777777

778-
int I3CBus::cccDirectRead(uint8_t targetAddr,
778+
bool I3CBus::cccDirectRead(uint8_t targetAddr,
779779
uint8_t cccId,
780780
uint8_t *rxData,
781781
uint16_t rxLength,
782782
uint32_t timeout)
783783
{
784-
int result = -1;
784+
bool result = false;
785785

786786
if (_initialized && (rxData != nullptr) && (rxLength != 0U)) {
787787
uint32_t controlBuffer[0xFF];
@@ -812,7 +812,7 @@ int I3CBus::cccDirectRead(uint8_t targetAddr,
812812
if (st == HAL_OK) {
813813
st = HAL_I3C_Ctrl_ReceiveCCC(&_hi3c, &context, timeout);
814814
if (st == HAL_OK) {
815-
result = 0;
815+
result = true;
816816
}
817817
}
818818
}
@@ -824,45 +824,38 @@ int I3CBus::cccDirectRead(uint8_t targetAddr,
824824
// CCC direct-read helpers
825825
// ============================================================================
826826

827-
int I3CBus::getbcr(uint8_t dynAddr, uint8_t &bcr, uint32_t timeout)
827+
bool I3CBus::getbcr(uint8_t dynAddr, uint8_t &bcr, uint32_t timeout)
828828
{
829-
int result = 0;
829+
bool result = false;
830830
uint8_t rxData[1] = {0};
831831

832-
int rc = cccDirectRead(dynAddr, I3C_CCC_GETBCR_DIR, rxData, 1U, timeout);
833-
if (rc != 0) {
834-
result = rc;
835-
} else {
832+
result = cccDirectRead(dynAddr, I3C_CCC_GETBCR_DIR, rxData, 1U, timeout);
833+
if (result) {
836834
bcr = rxData[0];
837835
}
838-
839836
return result;
840837
}
841838

842-
int I3CBus::getdcr(uint8_t dynAddr, uint8_t &dcr, uint32_t timeout)
839+
bool I3CBus::getdcr(uint8_t dynAddr, uint8_t &dcr, uint32_t timeout)
843840
{
844-
int result = 0;
841+
bool result = false;
845842
uint8_t rxData[1] = {0};
846843

847-
int rc = cccDirectRead(dynAddr, I3C_CCC_GETDCR_DIR, rxData, 1U, timeout);
848-
if (rc != 0) {
849-
result = rc;
850-
} else {
844+
result = cccDirectRead(dynAddr, I3C_CCC_GETDCR_DIR, rxData, 1U, timeout);
845+
if (result) {
851846
dcr = rxData[0];
852847
}
853848

854849
return result;
855850
}
856851

857-
int I3CBus::getpid(uint8_t dynAddr, uint64_t &pid, uint32_t timeout)
852+
bool I3CBus::getpid(uint8_t dynAddr, uint64_t &pid, uint32_t timeout)
858853
{
859-
int result = 0;
854+
bool result = false;
860855
uint8_t rxData[6] = {0};
861856

862-
int rc = cccDirectRead(dynAddr, I3C_CCC_GETPID_DIR, rxData, 6U, timeout);
863-
if (rc != 0) {
864-
result = rc;
865-
} else {
857+
result = cccDirectRead(dynAddr, I3C_CCC_GETPID_DIR, rxData, 6U, timeout);
858+
if (result) {
866859
pid = 0ULL;
867860
pid |= (uint64_t)rxData[0] << 40;
868861
pid |= (uint64_t)rxData[1] << 32;
@@ -879,24 +872,24 @@ int I3CBus::getpid(uint8_t dynAddr, uint64_t &pid, uint32_t timeout)
879872
// 9. High-level CCC commands
880873
// ============================================================================
881874

882-
int I3CBus::resetDynamicAddresses()
875+
bool I3CBus::resetDynamicAddresses()
883876
{
884877
return cccBroadcastWrite(I3C_CCC_RSTDAA_BCAST, nullptr, 0U, false, 1000U);
885878
}
886879

887-
int I3CBus::disableEvents(const uint8_t *pCCCData, uint16_t length)
880+
bool I3CBus::disableEvents(const uint8_t *pCCCData, uint16_t length)
888881
{
889882
return cccBroadcastWrite(I3C_CCC_DISEC_BCAST, pCCCData, length, length > 0U, 1000U);
890883
}
891884

892-
int I3CBus::assignAllStaticAsDynamic()
885+
bool I3CBus::assignAllStaticAsDynamic()
893886
{
894887
return cccBroadcastWrite(I3C_CCC_SETAASA_BCAST, nullptr, 0U, false, 1000U);
895888
}
896889

897-
int I3CBus::assignDynamicAddress(uint8_t staticAddr7, uint8_t dynAddr7)
890+
bool I3CBus::assignDynamicAddress(uint8_t staticAddr7, uint8_t dynAddr7)
898891
{
899-
int result = -1;
892+
bool result = false;
900893

901894
if (_initialized) {
902895
uint8_t daByte = static_cast<uint8_t>((dynAddr7 & 0x7FU) << 1);
@@ -906,15 +899,15 @@ int I3CBus::assignDynamicAddress(uint8_t staticAddr7, uint8_t dynAddr7)
906899
return result;
907900
}
908901

909-
int I3CBus::disecAll()
902+
bool I3CBus::disecAll()
910903
{
911904
const uint8_t evAll = I3C_CCC_EVT_ALL;
912905
return disableEvents(&evAll, 1U);
913906
}
914907

915-
int I3CBus::rstactWholeTarget()
908+
bool I3CBus::rstactWholeTarget()
916909
{
917-
int result = -1;
910+
bool result = false;
918911

919912
if (_initialized) {
920913
uint8_t defByte = I3C_CCC_RSTACT_RESET_WHOLE_TARGET;
@@ -928,9 +921,9 @@ int I3CBus::rstactWholeTarget()
928921
return result;
929922
}
930923

931-
int I3CBus::rstactPeripheralOnly()
924+
bool I3CBus::rstactPeripheralOnly()
932925
{
933-
int result = -1;
926+
bool result = false;
934927

935928
if (_initialized) {
936929
uint8_t defByte = I3C_CCC_RSTACT_PERIPHERAL_ONLY;
@@ -944,12 +937,12 @@ int I3CBus::rstactPeripheralOnly()
944937
return result;
945938
}
946939

947-
int I3CBus::setEvents(uint8_t dynAddr,
940+
bool I3CBus::setEvents(uint8_t dynAddr,
948941
bool enable,
949942
uint8_t events,
950943
uint32_t timeout)
951944
{
952-
int result = -1;
945+
bool result = false;
953946

954947
if (_initialized && (_hi3c.Mode == HAL_I3C_MODE_CONTROLLER)) {
955948
uint8_t ev = events;
@@ -960,7 +953,7 @@ int I3CBus::setEvents(uint8_t dynAddr,
960953
return result;
961954
}
962955

963-
int I3CBus::enecHotJoin()
956+
bool I3CBus::enecHotJoin()
964957
{
965958
uint8_t evHj = I3C_CCC_EVT_HJ;
966959
return cccBroadcastWrite(I3C_CCC_ENEC_BCAST, &evHj, 1U, true, 1000U);
@@ -1136,7 +1129,7 @@ int I3CBus::assignKnownDevices(const I3CKnownDevice *knownDevices,
11361129
continue;
11371130
}
11381131

1139-
if (assignDynamicAddress(kd.staticAddr, dyn) == 0) {
1132+
if (assignDynamicAddress(kd.staticAddr, dyn)) {
11401133
markAddrUsed(dyn);
11411134

11421135
if (count < maxDiscovered) {
@@ -1153,15 +1146,15 @@ int I3CBus::assignKnownDevices(const I3CKnownDevice *knownDevices,
11531146
uint8_t dcr = 0U;
11541147
uint64_t pid = 0ULL;
11551148

1156-
if (getbcr(dyn, bcr) == 0) {
1149+
if (getbcr(dyn, bcr)) {
11571150
d.bcr = bcr;
11581151
}
11591152

1160-
if (getdcr(dyn, dcr) == 0) {
1153+
if (getdcr(dyn, dcr)) {
11611154
d.dcr = dcr;
11621155
}
11631156

1164-
if ((d.pid == 0U) && (getpid(dyn, pid) == 0)) {
1157+
if ((d.pid == 0U) && (getpid(dyn, pid))) {
11651158
d.pid = pid;
11661159
}
11671160
}
@@ -1308,7 +1301,7 @@ int I3CBus::discover(const I3CBusBeginConfig &cfg,
13081301
initAddressMap();
13091302

13101303
if (cfg.doRstact) {
1311-
if (rstactWholeTarget() != 0) {
1304+
if (!rstactWholeTarget()) {
13121305
(void)rstactPeripheralOnly();
13131306
}
13141307
}

0 commit comments

Comments
 (0)