Quantcast
Channel: Infineon Forums
Viewing all 9892 articles
Browse latest View live

Tc275 uart+dma


Aurix 2G TC3xx LBIST execution and PLL configuration sequence

$
0
0
Hello Support,
In Aurix 2G TC3xx [TC387] devices, LBIST can be run when the CPU is put into 300MHz PLL Clock mode instead of default Back-up clock?
If no, then please point me to the User Manual Section/Page number where it is mentioned that should not be done at all.
I am assuming before LBIST execution one can configure PLL to 300MHz and switch the CPU clock without any adverse effect.
Please confirm.
Best Regards

IRS2007 failure when running with mosfet IRFB3607

$
0
0
Hi,

I am designing a BLDC motor controller and facing some issues with using an IRS2007 along with IRFB3607.
Attachment 4408

For one phase, the high side and low side work well as long as V_Pow is disconnected. Once V_pow is connected, the signal from the low side drives the high side. And low side is off.

This creates a high to high short over 2 phases of the motor and the motor immediately stops. If driven by the two other phases, the motor runs.

I have tried this configuration multiple times, at first I used a complimentary BJT (PNP_NPN) duo to increase the current pumped.
In that case the driver would work properly when V_POW was not connected but fail after V_POW was connected to 12Volts. I need this to work at 60V.
Every time when driving 2 phases the system would work but once connected to 3 phases, one phase would fail.

In the below config, both HO and LO would be shorted with V_Boost & V_in respectively. I presumed it was a MOS failure due to over current.

Attachment 4409
As of now I have destroyed 17 drivers trying to figure out what happened. Don't know what I am doing wrong, The mosfets don't seem to fail. Max current through the power circuit is hardly 1 -2 amps.

This is switching at 2.5kHz and the turn on time varies between 100-300 ns while turn off time is around 100-150 ns.
?????

IRS2007/2008 -- drive with DC control input?

$
0
0
Hi Brencon,

If the gate has to be on for an hour or so, why don't you use a huge capacitor like 100uF or so? I think it should do the trick. You may need to add a resistor between the bootstrap diode and Vcc to limit current surges though.

Also you can check out this application note, https://www.infineon.com/dgdl/Infine...6c47de609d140a Chapter 8 addresses your issue a bit differently.

Looking for the XC164CM UCAN Starter kit USB stick

IR2113 For VFD use, one driver keeps failing

$
0
0
Hi Ryan, Is your problem solved?

Aurix TC224 TFT can't debug example Blinky_LED_1 project

$
0
0
I have a aurix application kit for TC224 TFT board. I use Aurix Development Studio and actually I'm not sure this is the right tool for development but other tools have too much issue about installing. I correctly builded project but when it comes to debug it gives an error.

Error creating session
The debug instrument IO could not be initialized.
The GDI debug instrument provided the following error message.
Could not open Access HW

I'm connecting to PC via Usb mini cable. In DAS server I also cannot see device. What i do wrong? How can i solve that problem? How can see device on DAS server?

Regarding iLLDs for TCx27D

$
0
0
Hi, will Infineon Support customers if there is any bug or query related to Standard iLLDs provided??

Tle9273 not able to send/receive proper data through SPI to/from master RH850F1KHD8

$
0
0
Hi Sahithi,

can you please provide us a scope-screenshot, showing a 16-bit SPI transmission (SDI, SDO, CLK, CSN)?

Thanks

Tle5012b ssc via tle987x evalboard,

$
0
0
Hello Fiz,

I rewrote tle5012b arduino library for tle987x eval board. My code is below. And i have used the configuration which is below for the ssc communication. I have used 470 ohm resistor for mosi and miso
before connecting the ssc data pins. I supply tle5012b e3005 with vddexit which is 5v. I have used p0.1 as chip select pin. Any help will be appreciated.
Quote:

#include "tle_device.h"
#include "eval_board.h"
void setup();
double calculateAngleSpeed(double angRange, int16_t rawAngleSpeed, uint16_t firMD, uint16_t predictionVal);
uint8_t crcCalc(uint8_t* crcData, uint8_t length);
double angleValue;
uint8_t crc8(uint8_t *data, uint8_t length);
uint8_t getSecondByte(uint16_t twoByteWord);
uint8_t getFirstByte(uint16_t twoByteWord);
void enableSensor();
void disableSensor();
enum errorTypes getAngleValue();
enum errorTypes readFromSensor(uint16_t command, uint16_t *data);

/************************************************** ***************************/
/** SSC1: sends one byte (0xAA) as SPI master @ 1 Mbaud **/
/************************************************** ***************************/
/** program SSC1 to operate at 1 Mbaud **/
/** SSC1 sends one byte at P0.3 (CLK), P0.2 (MTSR) **/
/************************************************** ***************************/

#define TLE5012B_H

// Sensor registers
#define READ_SENSOR 0x8000 //!< base command for read
#define WRITE_SENSOR 0x5000 //!< base command for write
#define READ_BLOCK_CRC 0x8088 //!< initialize block CRC check command



#define SYSTEM_ERROR_MASK 0x4000 //!< System error masks for safety words
#define INTERFACE_ERROR_MASK 0x2000 //!< Interface error masks for safety words
#define INV_ANGLE_ERROR_MASK 0x1000 //!< Angle error masks for safety words

#define CRC_POLYNOMIAL 0x1D //!< values used for calculating the CRC
#define CRC_SEED 0xFF
#define CRC_NUM_REGISTERS 0x0008 //!< number of CRC relevant registers
#define MAX_REGISTER_MEM 0x0030 //!< max readable register values buffer

#define DELETE_BIT_15 0x7FFF //!< Value used to delete everything except the first 15 bits
#define CHANGE_UINT_TO_INT_15 0x8000 //!< Value used to change unsigned 16bit integer into signed
#define CHECK_BIT_14 0x4000 //!<
#define GET_BIT_14_4 0x7FF0 //!<

#define DELETE_7BITS 0x01FF //!< values used to calculate 9 bit signed integer sent by the sensor
#define CHANGE_UNIT_TO_INT_9 0x0200 //!< Value used to change unsigned 9bit integer into signed
#define CHECK_BIT_9 0x0100

#define POW_2_15 32768.0 //!< values used to for final calculations of angle speed, revolutions, range and value
#define POW_2_7 128.0 //!<
#define ANGLE_360_VAL 360.0

#define TEMP_OFFSET 152.0 //!< values used to calculate the temperature
#define TEMP_DIV 2.776

//!< Prints a binary number with leading zeros (Automatic Handling)
#define PRINTBIN(Num) for (uint32_t t = (1UL<< (sizeof(Num)*8)-1); t; t >>= 1) Serial.write(Num & t ? '1' : '0');
//!< Prints a binary number with leading zeros (Automatic Handling) with space
#define PRINTBINS(Num) for (uint32_t t = (1UL<< (sizeof(Num)*8)-1); t; t >>= 1) Serial.write(Num & t ? " 1 " : " 0 ");

/*!
* Error types from safety word
*/
enum errorTypes
{
NO_ERROR = 0x00, //!< NO_ERROR = Safety word was OK
SYSTEM_ERROR = 0x01, //!< SYSTEM_ERROR = over/under voltage, VDD negative, GND off, ROM defect
INTERFACE_ACCESS_ERROR = 0x02, //!< INTERFACE_ACCESS_ERROR = wrong address or wrong lock
INVALID_ANGLE_ERROR = 0x03, //!< INVALID_ANGLE_ERROR = NO_GMR_A = 1 or NO_GMR_XY = 1
ANGLE_SPEED_ERROR = 0x04, //!< ANGLE_SPEED_ERROR = combined error, angular speed calculation wrong
CRC_ERROR = 0xFF //!< CRC_ERROR = Cyclic Redundancy Check (CRC), which includes the STAT and RESP bits wrong
};

/*!
* Set the UPDate bit high (read from update buffer) or low (read directly)
*/
enum updTypes
{
UPD_low = 0x0000, //!< read normal registers
UPD_high = 0x0400, //!< read update buffer registers
};

/*!
* Switch on/off safety word generation
*/
enum safetyTypes
{
SAFE_low = 0x0000, //!< switch of safety word generation
SAFE_high = 0x0001, //!< switch on safety word generation
};
uint8_t mMOSI; //!< Pin for SPI MOSI (pin 0.6 on test board);
uint8_t mMISO; //!< Pin for SPI MISO (pin 0.7 on test board)
uint8_t mSCK; //!< Pin for CLOCK (pin 0.8 on test board)
uint8_t mCS; //!< Pin for chip select (pin 0.9 on test board)

uint16_t data;
uint16_t _command1; //!< command write data [0] = command [1] = data to write
uint16_t _command2; //!< command write data [0] = command [1] = data to write
uint16_t _received[MAX_REGISTER_MEM]; //!< fetched data from sensor with last word = safety word
uint16_t _registers[CRC_NUM_REGISTERS]; //!< keeps track of the values stored in the 8 _registers, for which the CRC is calculated
int main(void)
{
/************************************************** ***************************
** initialization of the hardware modules based on the configuration done **
** by using the IFXConfigWizard **
************************************************** ***************************/
TLE_Init();
setup();


for (;;)
{
(void)WDT1_Service();
Delay_us(1000000);
enableSensor();
getAngleValue();
}
}

void setup()
{
mMOSI=0x02; //!< Pin for SPI MOSI (pin 0.6 on test board);
mMISO=0x24; //!< Pin for SPI MISO (pin 0.7 on test board)
mSCK=0x03; //!< Pin for CLOCK (pin 0.8 on test board)
mCS=0x01;
enableSensor();

}


enum errorTypes getAngleValue()
{
angleValue=0;
int16_t rawAnglevalue=0;
uint16_t rawData = 0;
enum errorTypes status = readFromSensor(REG_AVAL, &rawData);
if (status != NO_ERROR)
{
return (status);
}
rawData = (rawData & (DELETE_BIT_15));
//check if the value received is positive or negative
if (rawData & CHECK_BIT_14)
{
rawData = rawData - CHANGE_UINT_TO_INT_15;
}
rawAnglevalue = rawData;
angleValue = (ANGLE_360_VAL / POW_2_15) * ((double) rawAnglevalue);
return (status);
}
enum errorTypes readFromSensor(uint16_t command, uint16_t *data)
{
enum errorTypes checkError = NO_ERROR;

_command1 = READ_SENSOR | command | UPD_low | SAFE_low;
uint16_t _received[MAX_REGISTER_MEM] = {0};

//_spiConnection->setCSPin(mCS);
PORT_ChangePin(LED1, PORT_ACTION_SET);
//Delay_us(100);
//_spiConnection->sendReceiveSpi(_command1, 1, _received, 2);
PORT_ChangePin(LED1, PORT_ACTION_CLEAR);
SSC1_SendWord(_command1);
Delay_us(5000);

_received[0]=SSC1_ReadWord();

_received[1]=SSC1_ReadWord();
*data = _received[0];

PORT_ChangePin(LED1, PORT_ACTION_SET);
if (true)
{
// checkError = checkSafety(_received[1], _command1, &_received[0], 1);
if (checkError != NO_ERROR)
{
data = 0;
}
}

checkError=NO_ERROR;
return (checkError);
}
void enableSensor()
{

PORT_ChangePin(LED1, PORT_ACTION_SET);
//digitalWrite(mCS, HIGH);
}

void disableSensor()
{
PORT_ChangePin(LED1, PORT_ACTION_CLEAR);
//digitalWrite(mCS, low);
}
//-----------------------------------------------------------------------------
// none_class functions

/*!
* Gets the first byte of a 2 byte word
* @param twoByteWord insert word of two bytes long
* @return returns the first byte
*/
uint8_t getFirstByte(uint16_t twoByteWord)
{
return ((uint8_t) (twoByteWord >> 8));
}

/*!
* Gets the second byte of the 2 byte word
* @param twoByteWord insert word of two bytes long
* @return returns the second byte
*/
uint8_t getSecondByte(uint16_t twoByteWord)
{
return ((uint8_t) twoByteWord);
}

/*!
* Function for calculation the CRC.
* @param data byte long data for CRC check
* @param length length of data
* @return returns 8bit CRC
*/
uint8_t crc8(uint8_t *data, uint8_t length)
{
uint32_t crc;
int16_t i, bit;

crc = CRC_SEED;
for (i = 0; i < length; i++)
{
crc ^= data[i];
for (bit = 0; bit < 8; bit++)
{
if ((crc & 0x80) != 0)
{
crc <<= 1;
crc ^= CRC_POLYNOMIAL;
}else{
crc <<= 1;
}
}
}

return ((~crc) & CRC_SEED);
}

/*!
* Function for calculation of the CRC
* @param crcData byte long data for CRC check
* @param length length of data
* @return runs crc8 calculation and returns CRC
*/
uint8_t crcCalc(uint8_t* crcData, uint8_t length)
{
return (crc8(crcData, length));
}

/*!
* Calculate the angle speed
* @param angRange set angular range value
* @param rawAngleSpeed raw speed value from read function
* @param firMD
* @param predictionVal
* @return calculated angular speed
*/
double calculateAngleSpeed(double angRange, int16_t rawAngleSpeed, uint16_t firMD, uint16_t predictionVal)
{
double finalAngleSpeed;
double microsecToSec = 0.000001;
double firMDVal;
if (firMD == 1)
{
firMDVal = 42.7;
}else if (firMD == 0)
{
firMDVal = 21.3;
}else if (firMD == 2)
{
firMDVal = 85.3;
}else if (firMD == 3)
{
firMDVal = 170.6;
}else{
firMDVal = 0;
}
finalAngleSpeed = ((angRange / POW_2_15) * ((double) rawAngleSpeed)) / (((double) predictionVal) * firMDVal * microsecToSec);
return (finalAngleSpeed);
}

Attachment 4416

?????

D2G board sample duration

$
0
0
If you know your sampling rate, then you can calculate the amount of time elapsed per sample (total_sampling_time = num_samples / sampling_rate). The interface should provide a way to retrieve and set your sampling rate.

Recommended power supply

$
0
0
Hi guys,
Do you have a recommended power supply I should use in my design? I mean is there a way to figure out the best suited?
Ty in advance

NTC - Benefits

$
0
0
Hi all,

I would like to know more about the NTC.
Why is the NTC useful and how can I use it to estimate my case temperature?

Thank you in advance!

Primepack IGBT5 and .XT

$
0
0
Good morning :)

What is the maximum allowed thermal interface temperature for 175°C Primepack modules with IGBT5 and .XT.
In particular for the FF1800R17IP5P.

About XMC4800 external clock selection


Endorsement key certificate (SLB96702.0)

$
0
0
Hi.
I've got the following device: OPTIGA™ TPM SLx 9670 TPM2.0 with SPI Interface in a Raspberry Pi 3 (https://www.infineon.com/dgdl/Infine...684b96e69f5d7b). I am trying to get the EK certificate but is seems that it is absent. I'm using the following command to fetch:
Code:

tpm2_nvread --index 0x1c00002 -a 0x40000001
I'm getting the following response:
Code:

ERROR: Tss2_Sys_NV_ReadPublic(0x18B) - tpm:handle(1):the handle is not correct for the use
ERROR: Failed to read NVRAM public area at index 0x1C00002
ERROR: Unable to run tpm2_nvread

Here is a list of all NV indices (empty):
Code:

pi@raspberrypi:~ $ tpm2_nvlist
pi@raspberrypi:~ $

Does Infineon have a EK certification server to restore the EK certificate? As far as I know this certificate should be already available but it is missing...

Thank you.

default pin state in standby mode

$
0
0
How can I manage the GPIO voltage output state in Aurix standby mode( by software or hardawe)?
when I enable standby mode, some output pins are being set on 1.2V level.
one pin (P14.1, HWCFG[1]) is set even on 3.2V level.

I have modules depended on those output pin states.
It’s important for me to keep those pins down during MCU inactivity.
I'd tried to pull down P14.1 pin but, in result, we only reduced it’s level to about 2.5V.

My question is: how can I set GPIOs to be pulled-down in standby mode ?

I work on Tc222L

Not getting correct count in GPR1 register for TIM PWM Mode

$
0
0
Hi,

I am Using Infineon AURIX TC264x and I am trying to measure the Input Frequency (e.g. 60KHz).

1) I am configure GTM TIM Module 1 channel 4 in PWM Measurement Mode.
2) The GTM CMU Clock Module Global clock configure for 80MHz and CMU Clock0 for 10MHz.
3) Enable the new Value Interrupt.

according to clock select and input frequency i am supposed to get the period count approx. 166 in GPR1 register.
But I am getting the count as 10 or 11.

please let me know if I missed anything or I did something wrong?

Thank you.

For further details ,


/* initialize TIM */
IfxGtm_Tim_Config configTim;

/* Initialization */
INIT()
{
/* Enable the GTM Module */
IfxGtm_enable(&MODULE_GTM);

/* Get the module Frequency */
Globalfrequency = IfxGtmCmu_getModuleFrequency(&MODULE_GTM);

/* we set the global clock to 80MHz */
IfxGtmCmu_setGclkFrequency(&MODULE_GTM, 80000000.0f);

/* set CMU0 frequency 10MHz */
IfxGtmCmu_setClkFrequency(&MODULE_GTM, Ifx_Gtm_Tim_Clock_cmuClk0, 10000000.0f);

/* enable CMU0 clock */
IfxGtmCmu_enableClocks(&MODULE_GTM, IFXGTMCMU_CLKEN_CLK0);

/* Configuration of TIM Module */
IfxGtm_Tim_initConfig(&configTim);

/* Select Module 1 */
configTim.module = IfxGtm_Tim_Module_1;

/* Select Channel 4 */
configTim.channel = IfxGtm_Tim_Channel_4;

/* Select Channel option 4 */
configTim.chOption = IfxGtm_channelOption_4;

/* Select the GPR0 register to hold the Counter value */
configTim.gpr0Sel = Ifx_Gtm_Tim_Gpr0Sel_cnts;

/* Select Input Pin Mode */
configTim.inputPinMode = IfxPort_InputMode_pullDown;

/* Enable New Value Interrupt */
configTim.irq.irqOnNewVal = ICM_ENABLE;

/* Set IRQ Mode */
configTim.irqmode = IfxGtm_IrqMode_pulseNotify;

/* Update Interrupt Register */
ICM_EnableInterrupt(&MODULE_GTM,configTim.module,& configTim.irq,configTim.irqmode);

/* initialization */
IfxGtm_Tim_init(&MODULE_GTM, &configTim);

/* Configure the Input Pin PORT 14 pin 1*/
IfxGtm_PinMap_setTimTin(&IfxGtm_TIM1_4_TIN81_P14_1 _IN, configTim.inputPinMode);
IfxPort_setPinPadDriver(&MODULE_P14, 1, IfxPort_PadDriver_cmosAutomotiveSpeed2);

}

IfxGtm_Tim_init()
{
case IfxGtm_Tim_Channel_4:
gtm->TIM[config->module].CH4_CTRL.B.ARU_EN = 0;
gtm->TIM[config->module].CH4_CTRL.B.CLK_SEL = config->clock;
gtm->TIM[config->module].CH4_CTRL.B.TIM_MODE = config->mode;
gtm->TIM[config->module].CH4_CTRL.B.GPR0_SEL = config->gpr0Sel;
gtm->TIM[config->module].CH4_CTRL.B.GPR1_SEL = 3;
gtm->TIM[config->module].CH4_CTRL.B.CNTS_SEL = 0;
gtm->TIM[config->module].CH4_CTRL.B.ISL = 0;
gtm->TIM[config->module].CH4_CTRL.B.DSL = 1;
gtm->TIM[config->module].CH4_CTRL.B.FLT_CNT_FRQ = config->filterClock;
gtm->TIM[config->module].CH4_FLT_RE.U = config->FLT_Rise_Time;
gtm->TIM[config->module].CH4_FLT_FE.U = config->FLT_Fall_Time;
gtm->TIM[config->module].CH4_CTRL.B.FLT_EN = (config->filterEnable != FALSE) ? 1:0;
gtm->TIM[config->module].CH4_CTRL.B.CICTRL = 0;
gtm->TIM[config->module].IN_SRC.B.VAL_4 = 0;
gtm->TIM[config->module].IN_SRC.B.MODE_4 = 0;
gtm->TIM[config->module].CH4_ECTRL.B.EXT_CAP_SRC = 0;
gtm->TIM[config->module].CH4_CTRL.B.EXT_CAP_EN = 0;
gtm->INOUTSEL.TIM[config->module].INSEL.B.CH4SEL = 3;
gtm->TIM[config->module].CH4_CTRL.B.TIM_EN = 1;
break;
}

/* Interrupt ISR */

if(ICM_isNewValueEvent(&MODULE_GTM,configTim.modul e) == ICM_ENABLE)
{
IfxPort_setPinState(&MODULE_P14,0,IfxPort_State_to ggled);
TOCount = IfxGtm_Tim_getCnt(&MODULE_GTM,configTim.module,con figTim.channel);
/* get the value from Counter register */
GPR01 = IfxGtm_Tim_getPeriod(&MODULE_GTM,configTim.module, configTim.channel);
/* get the value from Shadow Counter register */
GPR0 = IfxGtm_Tim_getPulse(&MODULE_GTM,configTim.module,c onfigTim.channel);
/* clear the Interrupt Flag */
ICM_ClearInterruptFlag(&MODULE_GTM,configTim.modul e);
}

Looking for the XC164CM UCAN Starter kit USB stick

ADC Measurement Adv App Sync

$
0
0
Hi,
Is it possible to synchronize the conversion between 2 ADC_MEASUREMENT_ADV Dave apps?
I see "Sync. Conversion" tab but not sure how to use it. Is there an app note perhaps?
Using XMC1400 series.

Cheers!
Viewing all 9892 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>