When trying to do isochronous transfers with the USB Peripheral Driver Library, you may notice that the library only supports isochronous transfers on Endpoint 3 even though the device's datasheet says endpoints 1-3 support isochronous transfers.
The device does support isochronous transfers on endpoints 1 through 3, but the library was only designed to support isochronous transfers on endpoint 3 by default. All Silicon Labs designs use endpoint 3 for isochronous transfers, so the library was built around this as well as with the idea of keeping the code simple in mind. The library can be modified to support isochronous on other endpoints, but the library does not support this out of the box.
I am trying to reproduce the current consumption numbers specified in the datasheet of an EFM8 device. How do I make sure that I am using the same settings as the numbers in the datasheet?
Provided with Simplicity Studio is a set of software examples that demonstrate how to use the device's various peripherals. One of these examples is PowerModes and shows how to put the device into its various low power states. In Simplicity Studio, this code is listed under Software Examples when you have your device selected.
While running the TestPanel example which included in the USBXpress 4 SDK v4.0.3 on C8051F340 MCU, the device can be enumerated as a USBXpress Device viewing from the Windows Device Manager, however, it failed to start the Host application TestPanel.exe, what would cause the issue as below?
Answer
This is caused by incorrect USBXpress driver version installed on your machine if you are not using the USBXpress driver that is included in the same SDK version.
To solve the issue, uninstall the existing driver of the USBXpress Device, and then re-install the corresponding driver included in the USBXpress SDK where you are running the USBXpress example.
For the USBXpress SDK v4.0.3 mentioned above, the driver version is 4.0.0.0 with driver date of 4/8/2013.
For 8-bit MCU like EFM8UB2, a port pin isavailable on crossbar, do I need to enable crossbar if a port pin work as general purpose GPIO (non peripheral mode)?
Answer
For port pin is available on crossbar, if you need to control it's level through the Px.x latch value, you need to enable the crossbar.
Take the EFM8UB2 as example, you could see what port pin was available on crossbar in figure 11.4 on page 83 of the reference manual.
The port I/O cell block diagram shown in figure 11.2 on page 79 of reference manual.
From the below diagram, we can know once the crossbar is disabled, the Px.x latch value wont' take effects on port pin.
What is the difference of GPIO structure on Silicon Labs MCU families.
Answer
5V tolerance of GPIO pins on Silicon Labs MCU families as follows
Type A:
Pins are 5V tolerant across the normal operating power supply range. When the power supply is 0V, the pins can tolerate 3.3V indefinitely, and they can tolerate 5V for brief periods (such as a hot-plug situation) without additional pin leakage. Long-term exposure to 5V while the chip is unpowered may result in performance degradation or failure.
Devices: F30x, F326. etc
Type B:
Pins are tolerant of the IO power supply voltage plus 2.5V, so they are 5V tolerant with a 3.3V supply. When the pin voltage rises more than 2V above the supply, the leakage currents from the pin to the supply and from the pin to ground will increase with voltage. When the power supply is 0V, the applied pin voltage can be as high as 3.3V at room temperature with moderate leakage; but at that voltage, the leakage can be very high at elevated temperature.
Devices: EFM8UB1, C8051F86x. etc
Type C:
Pins cannot exceed the IO power supply voltage, which can be up to 5V. The pin includes an ESD protection diode to the power supply, so the pin leakage will increase exponentially if the pin voltage exceeds the power supply voltage by more than 0.5V at room temperature. These pins are 5V tolerant only if the IO supply is 5V..
Devices: C8051F55x.
Type D:
Pins cannot exceed the IO power supply voltage, which can be up to 3.3V. The pin includes an ESD protection diode to the power supply, so the pin leakage will increase exponentially if the pin voltage exceeds the power supply voltage by more than 0.5V at room temperature; therefore they are not 5V tolerant under any conditions.
Question
There is a statement in EFM8LB1 spec that pin leakage current is in the range of [-1.1 4] uA . Does this leakage current affects ADC result of external signal?
Answer
Correct, the leakage mainly dominated by the ESD protection circuit for the port structure. It may flow in or out of the device. The leakage current is strongly sensitive to the temperature.
Let us assume 100nA leakage, and output impedance for source signal to be measured is 10k ohm. Then the measurement error caused by the leakage likes an offset error of ADC result. This example gets 100nA*10kOhm = 1mV voltage offset (measured) on the pin.
Under condition that ADC is configured as 2.5V VFS and 12-bit resolution. Then we have 1 LSB equals to be about 2.5V/4096 = 610uV
Then the 10k Ohm resistance of external source signal to be measured would see 1 LSB offset error as 1mV>610uV.
What is the width of the pins on the TQFP-48 package on EFM32HG devices? This is not listed as a dimension in tables 4.4 (package specifications).
Answer
Firstly, page 59, Figure 5.1 does show the recommended landing patterns for this device's pins as 1.6 x 0.3 mm. So, it's reasonable to expect the pin width to be, at most 0.3 mm.
In table 4.4, we can also derive the pad with by examining the distance between the edges of adjacent pins (0.2 mm, T, U, V, Z) and the pitch width (the distance between the centers of pins (0.5 mm). The pitch width should be equal to (1/2 pin width) * 2 + pin separation. So pin width + 0.2 mm = 0.5 mm, so pin width equals 0.3 mm.
Examining a TQFP-48 device here with a microscope, I observe that the pins indeed do seem larger than the gaps between them, so 0.3 mm should be the correct number for the pin width, and 0.2 mm for the pin gaps.
((ADC Temp sensor measurement) - (stored Cal value) / 28 = Temperature C
However, I am getting odd results. For example, I measure 0xE84 from the temperature sensor. The cal value stored in flash at 0xFFD4-0xFFD5 reads back 0x10C7A. This results in the following formula.
(0xE84-0x1C7A) / 28 = -127.6 C
This can't be right since the measurement is being performed at room temperature. What is going on here?
Diagnosis
The temp sensor cal value is taken with the internal voltage reference at 1.65 V, and the ADC set to 14-bit mode with a PGA gain of 1 (rather than 0.5). The settings for taking a temperature sensor reading must be identical, or the measured value will be on the wrong scale compared to the temperature sensor.
Solution
Make sure that the ADC is set to 14-bit mode, 1.65 V internal reference, and PGA gain of 1 (0.5 is the default). As a result, our previous measurement at the same temperature now reads 0x20A9.
The resulting formula is then:
(0x20A9 - 0x1C7A) / 28 = 29.2 C
This is an expected result for a measurement near room temperature.
8-bit Knowledge Base
Isochronous transfer support in USB Peripheral Driver Library
When trying to do isochronous transfers with the USB Peripheral Driver Library, you may notice that the library only supports isochronous transfers on Endpoint 3 even though the device's datasheet says endpoints 1-3 support isochronous transfers.
The device does support isochronous transfers on endpoints 1 through 3, but the library was only designed to support isochronous transfers on endpoint 3 by default. All Silicon Labs designs use endpoint 3 for isochronous transfers, so the library was built around this as well as with the idea of keeping the code simple in mind. The library can be modified to support isochronous on other endpoints, but the library does not support this out of the box.
Current Consumption Examples?
I am trying to reproduce the current consumption numbers specified in the datasheet of an EFM8 device. How do I make sure that I am using the same settings as the numbers in the datasheet?
Provided with Simplicity Studio is a set of software examples that demonstrate how to use the device's various peripherals. One of these examples is PowerModes and shows how to put the device into its various low power states. In Simplicity Studio, this code is listed under Software Examples when you have your device selected.
TestPanel example in USBXpress SDK does not work?
Question
While running the TestPanel example which included in the USBXpress 4 SDK v4.0.3 on C8051F340 MCU, the device can be enumerated as a USBXpress Device viewing from the Windows Device Manager, however, it failed to start the Host application TestPanel.exe, what would cause the issue as below?
Answer
This is caused by incorrect USBXpress driver version installed on your machine if you are not using the USBXpress driver that is included in the same SDK version.
To solve the issue, uninstall the existing driver of the USBXpress Device, and then re-install the corresponding driver included in the USBXpress SDK where you are running the USBXpress example.
For the USBXpress SDK v4.0.3 mentioned above, the driver version is 4.0.0.0 with driver date of 4/8/2013.
Do I need enable crossbar if a port pin work as general purpose GPIO
Question
For 8-bit MCU like EFM8UB2, a port pin isavailable on crossbar, do I need to enable crossbar if a port pin work as general purpose GPIO (non peripheral mode)?
Answer
For port pin is available on crossbar, if you need to control it's level through the Px.x latch value, you need to enable the crossbar.
Take the EFM8UB2 as example, you could see what port pin was available on crossbar in figure 11.4 on page 83 of the reference manual.
The port I/O cell block diagram shown in figure 11.2 on page 79 of reference manual.
From the below diagram, we can know once the crossbar is disabled, the Px.x latch value wont' take effects on port pin.Silicon Labs 8-bit (C8051Fxxx and EFM8) MCU GPIO type.
Question
What is the difference of GPIO structure on Silicon Labs MCU families.
Answer
5V tolerance of GPIO pins on Silicon Labs MCU families as follows
Type A:Type B:
Pins are tolerant of the IO power supply voltage plus 2.5V, so they are 5V tolerant with a 3.3V supply. When the pin voltage rises more than 2V above the supply, the leakage currents from the pin to the supply and from the pin to ground will increase with voltage. When the power supply is 0V, the applied pin voltage can be as high as 3.3V at room temperature with moderate leakage; but at that voltage, the leakage can be very high at elevated temperature.
Devices: EFM8UB1, C8051F86x. etc
Type C:
Pins cannot exceed the IO power supply voltage, which can be up to 5V. The pin includes an ESD protection diode to the power supply, so the pin leakage will increase exponentially if the pin voltage exceeds the power supply voltage by more than 0.5V at room temperature. These pins are 5V tolerant only if the IO supply is 5V..
Devices: C8051F55x.
Type D:
Leakage current affects ADC measurement result
Question
There is a statement in EFM8LB1 spec that pin leakage current is in the range of [-1.1 4] uA . Does this leakage current affects ADC result of external signal?
Answer

Correct, the leakage mainly dominated by the ESD protection circuit for the port structure. It may flow in or out of the device. The leakage current is strongly sensitive to the temperature.
Let us assume 100nA leakage, and output impedance for source signal to be measured is 10k ohm. Then the measurement error caused by the leakage likes an offset error of ADC result. This example gets 100nA*10kOhm = 1mV voltage offset (measured) on the pin.
Under condition that ADC is configured as 2.5V VFS and 12-bit resolution. Then we have 1 LSB equals to be about 2.5V/4096 = 610uV
Then the 10k Ohm resistance of external source signal to be measured would see 1 LSB offset error as 1mV>610uV.
Related KBA: Comparator Input Leakage
Pin width: EFM32HG TQFP-48 package
Question
What is the width of the pins on the TQFP-48 package on EFM32HG devices? This is not listed as a dimension in tables 4.4 (package specifications).
Answer
Firstly, page 59, Figure 5.1 does show the recommended landing patterns for this device's pins as 1.6 x 0.3 mm. So, it's reasonable to expect the pin width to be, at most 0.3 mm.
In table 4.4, we can also derive the pad with by examining the distance between the edges of adjacent pins (0.2 mm, T, U, V, Z) and the pitch width (the distance between the centers of pins (0.5 mm). The pitch width should be equal to (1/2 pin width) * 2 + pin separation. So pin width + 0.2 mm = 0.5 mm, so pin width equals 0.3 mm.
Examining a TQFP-48 device here with a microscope, I observe that the pins indeed do seem larger than the gaps between them, so 0.3 mm should be the correct number for the pin width, and 0.2 mm for the pin gaps.
Measuring Temperature with EFM8LB1
Symptoms
I am measuring the internal temperature sensor with the ADC. I then use the formula from the appnote (https://www.silabs.com/documents/public/application-notes/AN929.pdf) to calculate the temperature, using the internal temp sensor calibration reading.
((ADC Temp sensor measurement) - (stored Cal value) / 28 = Temperature C
However, I am getting odd results. For example, I measure 0xE84 from the temperature sensor. The cal value stored in flash at 0xFFD4-0xFFD5 reads back 0x10C7A. This results in the following formula.
(0xE84-0x1C7A) / 28 = -127.6 C
This can't be right since the measurement is being performed at room temperature. What is going on here?
Diagnosis
The temp sensor cal value is taken with the internal voltage reference at 1.65 V, and the ADC set to 14-bit mode with a PGA gain of 1 (rather than 0.5). The settings for taking a temperature sensor reading must be identical, or the measured value will be on the wrong scale compared to the temperature sensor.
Solution
Make sure that the ADC is set to 14-bit mode, 1.65 V internal reference, and PGA gain of 1 (0.5 is the default). As a result, our previous measurement at the same temperature now reads 0x20A9.
The resulting formula is then:
(0x20A9 - 0x1C7A) / 28 = 29.2 C
This is an expected result for a measurement near room temperature.