Legacy microcontrollers Forum Discussions
I'm looking for a datasheet of F2MC-16LX double CAN bus microcontrollers (120-pin) MB90390.
I am working on the TLE9862 micro and am testing the User routines provided for flash operations.
I have used the below code flow in order to test the flash operation. USER_ERASE_SECTOR calls the routine present at address 00003865, DataFlashSector is the address 0x1103F000
//***********************************************************************
NVM_Error = USER_ERASE_SECTOR(DataFlashSector);
/* Check if Sector Erase passed */
if (NVM_Error == 0u)
{
/* Perform certain operations */
}
//***********************************************************************
The control reaches inside the if condition (as per the BootROM user manual this means the routine has passed) but from the memory window of my debug tool I can see that the sector still has the previously written data.
Am I missing any step here ? Any help in this regard will be appreciated.
Thanks,
Rahul Show Less
Where are the official statements that FM parts marked with "MB" are form, fit and functionally identical to the same parts marked with "CY"?
Might there be any change in these parts, such as an embedded manufacturing code, that would require change to production firmware, test or process when replacing "MB" parts with their equivalent "CY" parts?
Greg
P.S. I found some statements for specific parts. If there isn't a general statement for all parts, I'm specifically interested in CY9BF56 parts that changed from MB9F56 parts.
Reference: Meaning of Legacy 16-bit/32-bit Auto MCU Part Numbers - KBA227619 @ https://community.cypress.com/t5/Knowledge-Base-Articles/Meaning-of-Legacy-16-bit-32-bit-Auto-MCU-Part-Numbers-KBA227619/ta-p/259265 <-- applies only to CY9xF546 parts
Part number meaning of 16bit MCU <-- applies only to CY90F883 parts
Show LessI want to get the BSDL file of CY9BF122LPMC1 (MB9BF122LPMC1).
Because to use a trouble analysis by JTAG.
*BSDL (Boundary-Scan Description Language)-file.
Show LessIf i have new Infineon TriCore SAK TC1767 256F133HL microcontrolers need i some special tools to program it first time or can i write full backup from other one?
For reading/writing these MCU on board at bootmode i usually use HexProg, Magicmotorsport FLEX or Dimsport TRASDATA but i never try write new/empty MCU.
I will realy appriciete any help. Show Less
There is no mention of this 16-bit MCU being EOL in the near future, so I would greatly appreciate knowing the long term inventory and manufacturing situation for the CY96F615RBPMC-GS-UJE1.
I have spent many hours this week checking worldwide vendors in vain for the MCU, which is why my post here is a desperate last resort. There are no Cypress or Infineon vendors who have stock of that MCU (except for some shady sites in Hong Kong that claim to have thousands of pieces when in fact they do not). The current 8 month or longer lead times I am seeing from some of your vendors is not realistic at all.
Here's our problem. At the end of 2020 we made a request in Taiwan to order more, but we were told of long lead times. (We buy this MCU often and have for a very long time. That order in late 2020 was NOT our first order.) Well, that was the end of 2020, but we are still waiting even today. We are now told August 30th availability, which will have been more than 8 months since our initial order request in Taiwan. We will run out of stock at the end of this month of April. That is a serious problem for us, with very harsh consequences.
If Cypress can please supply me with insider information on how to acquire even several hundred pieces at any realistic price, I would appreciate that very much.
I look forward to your kind reply.
Thank you.
Addendum: The fact my post was moved into the "Legacy Products" section is rather concerning. It all the more emphasizes my desire to know the long term inventory and manufacturing situation surrounding this particular MCU. No replies after 24 hours is also not very encouraging.
Show LessHello,
I'm looking for this demo board but it got obsolescent.
Is there any similar board or a replacement?
Could I use to implement Ethercat the PSoC5LP or it is mandatory to use the FM3/FM4 family?
Thank you
Show Less• Install the HP Smart App following the on-screen instructions to the printer setup wizard.
• Now, open the HP Smart app and accept all the conditions.
• Then, add your HP printer model to the list and choose to set up your HP printer.
• Select your wireless HP printer to the available printer list.
• Connect your HP printer using the HP Smart App with Windows 10. Show Less
From what I understand the program flow should be like this.
//**Initialize DPS310
//**Read Coefficients
//**Setup Register of Sensor (Pressure:0x06 Temperature:0x07)
//**Setup Configuration register (0x09)
//**Read Pressure measurement Registers (0x00, 0x01, 0x02) (23:16, 15:8, 7:0)
//**Calculate using Formula the Actual measurement (Pressure or Temperature)
//**** Calculate pressure in Pascals
PRESSURE_SCALE = dps310_pressure_reading / DPS310_SCALE_FACTOR;
TEMPERATURE_SCALE = dps310_temperature_reading / DPS310_SCALE_FACTOR;
Final_pressure_reading = dps310_c00 + PRESSURE_SCALE*(dps310_c10 + PRESSURE_SCALE *(dps310_c20+ PRESSURE_SCALE *dps310_c30)) + TEMPERATURE_SCALE *dps310_c01 + TEMPERATURE_SCALE *PRESSURE_SCALE *(dps310_c11+PRESSURE_SCALE*dps310_c21);
//**** Calculate Temperature in Celsius
Final_temperature_reading = dps310_c0*0.5 + dps310_c1*TEMPERATURE_SCALE
However, I am having a hard time integrating it and making it work.
Here is a part of my code. ATTACHED is the full code
/*
* main.c
*
*/
#include//Declarations from DAVE Code Generation (includes SFR declaration)
int main(void)
{
DAVE_STATUS_t status;
uint32_t Timer1_ID, timer_status;
status = DAVE_Init(); /* Initialization of DAVE APPs */
if(status != DAVE_STATUS_SUCCESS)
{
/* Placeholder for error handler code. The while loop below can be replaced with an user error handler. */
XMC_DEBUG("DAVE APPs initialization failed\n");
while(1U)
{
}
}
/* Placeholder for user application code. The while loop below can be replaced with user application code. */
Timer1_ID = SYSTIMER_CreateTimer(MSEC_100, SYSTIMER_MODE_ONE_SHOT, (void*)Timer1_Timeout, NULL);
m_timer1_count=0;
timer_status = SYSTIMER_StartTimer(Timer1_ID);
while(m_timer1_count == 0);
Init_DPS310(); ///edit
DPS310_Read_Pressure();
while(1U)
//WAIT FOR dps310 FOR STARTUP
{
}
}
void Timer1_Timeout(void)
{
m_timer1_count++;
}//Timer1_Timeout
void DPS310_Interrupt_Handler(void)
{
}//BPS310_Interrupt_Handler
void DPS310_I2C_Write(uint8_t diw_register_address, uint8_t diw_write_command)
/*
* Purpose: Writes one byte of data into a DPS310 register
* Inputs: Register address and the data to write
* Outputs: None
*/
{
uint8_t diw_write_buffer[2];
//place register address and register contents in write buffer
diw_write_buffer[0] = diw_register_address;
diw_write_buffer[1] = diw_write_command;
I2C_MASTER_Transmit(&I2C_MASTER_DPS310, DPS310_SEND_START, DPS310_ADDRESS_SDO_NC, diw_write_buffer, 2U, DPS310_SEND_STOP);
while(I2C_MASTER_IsTxBusy(&I2C_MASTER_DPS310));
}//DSP310_Write
void DPS310_I2C_Read(uint8_t dir_start_register_address, uint8_t dir_read_byte_count, uint8_t *dir_data_read_buffer)
/*
* Purpose: Read one or more bytes of data from the DPS310 to the buffer specified
* Inputs: Address of the first register to read from, the number of data bytes to read and the address of the read buffer
* Outputs: None
*/
{
I2C_MASTER_Transmit(&I2C_MASTER_DPS310, DPS310_SEND_START, DPS310_ADDRESS_SDO_NC, &dir_start_register_address, 1U, DPS310_NO_STOP);
while(I2C_MASTER_IsTxBusy(&I2C_MASTER_DPS310));
I2C_MASTER_Receive(&I2C_MASTER_DPS310, DPS310_SEND_START, DPS310_ADDRESS_SDO_NC, dir_data_read_buffer, dir_read_byte_count, DPS310_SEND_STOP, DPS310_SEND_NACK);
while(I2C_MASTER_IsRxBusy(&I2C_MASTER_DPS310));
}//DPS310_Read
void DSP310_Read_MEAS_CFG_Reg(void)
/*
* Purpose: Read in the MEAS_CFG register and store it the DPS310_Mode_Sensor_register variable.
* Input:
* Output:
*
*/
{
DPS310_I2C_Read(DPS310_MEAS_CFG, 1U, &dsp310_meas_cfg_register);
}//DSP310_Read_MEAS_CFG_Reg
void Init_DPS310(void)
{
uint8_t dps310_tmp_coef_srce_flag;
//INITIALIZE SENSOR
do
{
DSP310_Read_MEAS_CFG_Reg();
} while (!(dsp310_meas_cfg_register & DPS310_MCR_SENSOR_RDY_FLAG));
//wait for coefficients to be available
do
{
DSP310_Read_MEAS_CFG_Reg();
} while (!(dsp310_meas_cfg_register & DPS310_MCR_COEFF_RDY_FLAG));
//REGISTERS 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,0x20,0x21.... Total of 18 registers
DPS310_I2C_Read(DPS310_COEF_c0_B1, 18U, dps310_coefficients);
//Setup Pressure configuration register 0x06
DPS310_I2C_Write(DPS310_PRS_CFG, 0x00);
m_Delay_x_1msec(2);
//Read in the temperature coefficient source flag
DPS310_I2C_Read(DPS310_COEF_SRCE, 1U, &dps310_tmp_coef_srce_flag);
m_Delay_x_1msec(2);
//Setup Temperature configuration register
if (dps310_tmp_coef_srce_flag & 0x80)
{ //use external sensor
DPS310_I2C_Write(DPS310_TMP_CFG, 0x80);
}//if
else
{
DPS310_I2C_Write(DPS310_TMP_CFG, 0x00);
}//else
m_Delay_x_1msec(2);
//Setup interrupt and FIFO Configuration register
DPS310_I2C_Write(DPS310_CFG_REG, 0x00);
m_Delay_x_1msec(2);
// setup continous measurement (Config Register)
//dps310_write_data[0] = DPS310_MCR_CONT_PRS_TMP_MEAS;
//DPS310_I2C_Write(DPS310_CFG_REG, DPS310_MCR_CONT_PRS_TMP_MEAS);
//load coefficient values into variables
dps310_c00 = (dps310_coefficients[3] << 12) | (dps310_coefficients[4] << 4) | ((dps310_coefficients[5] >> 4) && 0x0f);
dps310_c10 = ((dps310_coefficients[5] & 0x0f) << 16) | (dps310_coefficients[6] << 😎 | dps310_coefficients[7];
dps310_c20 = (dps310_coefficients[12] << 😎 | dps310_coefficients[13];
dps310_c30 = (dps310_coefficients[16] << 😎 | dps310_coefficients[17];
dps310_c01 = (dps310_coefficients[8] << 😎 | dps310_coefficients[9];
dps310_c11 = (dps310_coefficients[10] << 😎 | dps310_coefficients[11];
dps310_c21 = (dps310_coefficients[14] << 😎 | dps310_coefficients[15];
dps310_c0 = (dps310_coefficients[0] << 4) | ((dps310_coefficients[1] & 0xf0) >> 4) ;
dps310_c1 = ((dps310_coefficients[1] & 0x0f) << 😎 | dps310_coefficients[2];
}
void DPS310_Read_Temperature(void)
{
DSP310_Read_MEAS_CFG_Reg();
//trigger a measurement if no background continuous temperature measurements
if ((dsp310_meas_cfg_register & DPS310_MCR_CONT_TMP_MEAS) != DPS310_MCR_CONT_TMP_MEAS)
{
//Trigger a temperature measurement
// dps310_write_data[0] = DPS310_MCR_TEMP_MEAS; //Command mode - temperature measurement
DPS310_I2C_Write(DPS310_MEAS_CFG, DPS310_MCR_TEMP_MEAS);
m_Delay_x_1msec(10);
DSP310_Read_MEAS_CFG_Reg();
}//if
m_Delay_x_1msec(2);
if (!(dsp310_meas_cfg_register & DPS310_MCR_TEMP_MEAS_RDY_FLAG))
{
//temperature measurement ready flag not set
m_Delay_x_1msec(3);
}
//Read in the three temperature measurement registers
DPS310_I2C_Read(DPS310_TMP_B2, 3U, dps310_temperature_reading);
//**** calculate temperature
TEMPERATURE_SCALE = *dps310_temperature_reading / DPS310_SCALE_FACTOR_1;
Final_temperature_reading = dps310_c0*0.5 + dps310_c1*TEMPERATURE_SCALE;
}//DPS310_Read_Temperature
void DPS310_Read_Pressure(void)
{
//Setup Configuration register for temperature measurement
DSP310_Read_MEAS_CFG_Reg();
//trigger a measurement if no background continuous pressure measurements
if (((dsp310_meas_cfg_register & 0x07) != DPS310_MCR_CONT_TMP_MEAS) &&
((dsp310_meas_cfg_register & 0x07) != DPS310_MCR_CONT_PRS_TMP_MEAS))
{
//Trigger a pressure measurement
DPS310_I2C_Write(DPS310_MEAS_CFG, DPS310_MCR_PRS_MEAS);
m_Delay_x_1msec(10);
DSP310_Read_MEAS_CFG_Reg();
}//if
m_Delay_x_1msec(2);
if (!(dsp310_meas_cfg_register & DPS310_MCR_PRESSURE_MEAS_RDY_FLAG))
{
m_Delay_x_1msec(3);
}
//Read Pressure measurement Registers (0x00, 0x01, 0x02) (23:16, 15:8, 7:0)
DPS310_I2C_Read(DPS310_PSB_B2, 3U, dps310_pressure_reading);
//**** calculate pressure in Pascals
PRESSURE_SCALE = *dps310_pressure_reading / DPS310_SCALE_FACTOR_1;
TEMPERATURE_SCALE = *dps310_temperature_reading / DPS310_SCALE_FACTOR_1;
Final_pressure_reading = dps310_c00 + PRESSURE_SCALE*(dps310_c10 + PRESSURE_SCALE *(dps310_c20+ PRESSURE_SCALE *dps310_c30)) + TEMPERATURE_SCALE *dps310_c01 + TEMPERATURE_SCALE *PRESSURE_SCALE *(dps310_c11+PRESSURE_SCALE*dps310_c21);
// TEMPERATURE
//Final_temperature_reading = dps310_c0*0.5 + dps310_c1*TEMPERATURE_SCALE
}//DPS310_Read_Pressure
void m_Delay_x_1msec(uint32_t delay_val)
{
uint32_t delay_cnt;
delay_cnt = delay_val * TIMER_DELAY_MUL_FACTOR;
TIMER_SetTimeInterval(&TIMER_0,delay_cnt);
TIMER_Start(&TIMER_0);
while(!TIMER_GetInterruptStatus(&TIMER_0));
TIMER_Stop(&TIMER_0);
}
Thank you and I hope you can help me. Show Less