欢迎来到恩智浦电源管理芯片中文技术社区

cancel
Showing results for 
Search instead for 
Did you mean: 

欢迎来到恩智浦电源管理芯片中文技术社区

1,351 Views
NXP Employee
NXP Employee

尊敬的客户:

     感谢你选择恩智浦半导体的芯片,如果有任何技术问题,请您在本社区提问,我们将会尽快回复。

谢谢。

8 Replies

451 Views
Contributor II

你好

请教一下S32K146 的读冲突中断是怎么测试出来的,能否给一个demo code?

我的代码简单测试流程下面回列出来 但是就是无法产生这个读冲突中断,能否帮忙指点一下为啥这样不产生读冲突中断,感谢你的回答

void EraseFlashSector(void)
{
uint32_t address = 0x00008000;
uint32_t flashData = 0 ;
uint32_t i = 0;
uint32_t expectData = 0;
uint32_t FailAddr = 0;

//erase 4KB flash sector (the smallest entity that can be erased)
while((FTFC->FSTAT & FTFC_FSTAT_CCIF_MASK) == 0); // Wait if operation in progress
FTFC->FSTAT = FTFC_FSTAT_ACCERR_MASK | FTFC_FSTAT_FPVIOL_MASK;

FTFC->FCCOB[3] = 0x09; //Erase Flash Sector command (0x09)
FTFC->FCCOB[2] = (address >> 16) & 0xff; //Flash address [23:16]
FTFC->FCCOB[1] = (address >> & 0xff; //Flash address [15:08]
FTFC->FCCOB[0] = address & 0xff; //Flash address [7:0]

FTFC->FSTAT = FTFC_FSTAT_CCIF_MASK; //launch command
while(( FTFC->FSTAT & FTFC_FSTAT_CCIF_MASK) == 0)
{

expectData = 0xFFFFFFFF;

for(i=0; i< 1024; i++)
{
FLASH_DRV_ProgramCheck(&flashSSDConfig, 0x8000+i*4, 4, &expectData, &FailAddr, 1);
}


flashData = *(uint32_t *)(0x8000 + 4);

flashData = *(uint32_t *)(0x8000 + 8);

flashData = *(uint64_t *)(0x8000 + 16);

for(i = 0; i< 1024;i++)
{
flashData = *(uint32_t *)(0x8000 + i*4);
}
}//wait for done
}

 

int main()

{

/* Enable global interrupt */
INT_SYS_EnableIRQGlobal();

/* interrupt test*/
FTFC->FCNFG |= 0x40;//enable read conflicit interrupt
INT_SYS_EnableIRQ(Read_Collision_IRQn);

EraseFlashSector();

}

0 Kudos

460 Views
NXP Employee
NXP Employee

Hi zhou shen,

    感谢使用NXP 电源管理中文论坛;

   1、MPC5744芯片内部的1.25V电压泵已被关闭 PMC.PMCCR.B.PMCCR_EN=0b1;
   PMC.PMCCR.B.INT_REG_BYPASS=0b1,因为数据手册说会有噪声

   2、我的MC35FA6500的散热焊盘没有接地,我从外部加锡用线接地,问题依然存在

        散热焊盘与芯片内部没有电气连接,只是散热的作用;

   3、焊接最小系统板,排除功率不够的问题,只保留MC35FS6500电源管理芯片和MPC5744最小系统,问题依然存在

以上办法都没有效果,请问还有没有其他解决办法?

    按照你的描述,怀疑是3.3V供电导致这个问题,

    首先,3.3V用外部PNP扩流时,输出精度为3%;

    另外,用示波器测量3.3V输出电压波形,看波形中是否有1s周期的电压波动导致ADC输出异常,导致这个问题

 

0 Kudos

460 Views
Contributor I

你好,我把VCCA的PNP去掉,干扰现象是一样的,通过示波器看3.3V电压输出波形,没有1S周期的电压波动,目前的测试情况如下:

1、最小系统板产生的5V电压供给16位单片机使用,未见异常

2、最小系统板内部MC35FS6500只让它工作,切断和板内3.3V,5V的连接,板内的3.3V和5V电压由外部引进(共地),1.25V由单片机自己产生的话,AD读取电压时的干扰就消失了

3、MC35FS6500 的EXPOSED PAD 接地后AD干扰还是一样存在,也没有减小

0 Kudos

460 Views
Contributor I

你好 

      我最近在使用MC35FS6500电源管理芯片给MPC5744供电,其中Vcore提供1.25V,VCCA提供3.3V,VAUX提供5V,其中3.3V和1.25V给单片机供电,5V作为AD参考电压,VCCA和VAUX使用2个PNP扩展电流,SELECT电阻使用24K电阻,使用过程中我发现其他都没问题,但是AD采样大概每隔1秒都会有一个异常电压信号出来,例如每4MS发送一次CAN报文,12位AD采样,正常数据为0x01f6~0x01f9,会有0x0216这么大的误差每隔1秒发送出来,经过各种测试,我发现当我在自制板的MC35FS6500 3.3V输出并联一个3.3V或者直接用外部3.3V(共地)为板提供3.3V时,AD干扰消失,期间我也发现了其他可能导致该问题的原因,包括:

1、MPC5744芯片内部的1.25V电压泵已被关闭 PMC.PMCCR.B.PMCCR_EN=0b1;
PMC.PMCCR.B.INT_REG_BYPASS=0b1,因为数据手册说会有噪声

2、我的MC35FA6500的散热焊盘没有接地,我从外部加锡用线接地,问题依然存在

3、焊接最小系统板,排除功率不够的问题,只保留MC35FS6500电源管理芯片和MPC5744最小系统,问题依然存在

以上办法都没有效果,请问还有没有其他解决办法?

 

0 Kudos

460 Views
NXP Employee
NXP Employee

Hi Xiao Yao,

    这个社区主要回答电源管理芯片的一些问题,MPC5746-MCU的问题请到下面链接的社区提问,那里会有专业的回答,谢谢!

    https://community.nxp.com/community/s32/mpc5xxx

    祝好!

    Allan

0 Kudos

460 Views
Contributor II

你好 

      我最近在MPC 5746b mcu 的电源管理碰到了一些问题。当周期测试休眠唤醒时,有时会出现造成MCU卡死的现象

也就是无法唤醒,设置的唤醒源是由can的rx来触发唤醒的

整个流程大致是收到休眠报文时,先处理完数据后,deinit外设,然后设置唤醒源以及唤醒后程序开始运行的地址。

pastedImage_1.png

pastedImage_2.png

pastedImage_3.png

能帮我分析一下吗 

谢谢啦

0 Kudos

460 Views
NXP Employee
NXP Employee

hi Xiao Yao,

    做唤醒的CAN模块是MCU的CAN模块,还是供电芯片SBC的CAN 模块呢?

Best Regards

Allan

0 Kudos

460 Views
Contributor II

hi Allan An

用作唤醒的CAN模块是MCU的CAN模块

Best Regards

Xiao Yang

0 Kudos