我是打算通过CAN通信,将收到的数据写入flash中。不调用FLash的 API的话,通信是没问题的;
图1:加入flash的API出现CAN通信问题
图2:加入Flash的API出现问题后,还抓到一帧正常的
图3:没有调用Flash的API,正常能进行CAN通信
希望大家给个建议指导下,谢谢!
Seven Han:
请问您使用的是哪颗芯片?
请参考controlSUITE中例程:C:\ti\controlSUITE\libs\utilities\flash_api
我是打算通过CAN通信,将收到的数据写入flash中。不调用FLash的 API的话,通信是没问题的;
图1:加入flash的API出现CAN通信问题
图2:加入Flash的API出现问题后,还抓到一帧正常的
图3:没有调用Flash的API,正常能进行CAN通信
希望大家给个建议指导下,谢谢!
lu xiaojian:
回复 Seven Han:
您好,感谢您抽出时间来解答我的问题,我使用2806芯片,经过测试,发现扇区A擦除不了,其它扇区能擦除,并且能写入,
扇区A的范围是0x3F6000-0X3F7FFF,2806芯片的存储器分布如下。一旦我擦除扇区A,就会出现我所说的问题。希望能再次得到您的关注和解答,谢谢!
我是打算通过CAN通信,将收到的数据写入flash中。不调用FLash的 API的话,通信是没问题的;
图1:加入flash的API出现CAN通信问题
图2:加入Flash的API出现问题后,还抓到一帧正常的
图3:没有调用Flash的API,正常能进行CAN通信
希望大家给个建议指导下,谢谢!
yakun song:
回复 lu xiaojian:
我当时做的大概流程是
有两个程序 一个是类似于串口IAP的bootloader引导程序,一个是真正的应用程序APP,
我把BL程序烧写在了A扇区,(涉及到操作flash的内容移到了ram里运行)在ram里定义了一段内存用来存can收到的程序数据,接收完成以后调用FLASH API 将数据写到了H扇区里面,然后跳转到H扇区执行程序
另一个是APP程序,修改CMD文件将程序和BEGIN都修改到了H扇区。通过map文件能知道程序占了多大的flash,下进去以后把H扇区开始的DAT文件导了出来作为输出文件供上位机解析后发送给bootloader程序(也可以用HEX或bin,我没用)
没啥用就当帮你顶了,
我是打算通过CAN通信,将收到的数据写入flash中。不调用FLash的 API的话,通信是没问题的;
图1:加入flash的API出现CAN通信问题
图2:加入Flash的API出现问题后,还抓到一帧正常的
图3:没有调用Flash的API,正常能进行CAN通信
希望大家给个建议指导下,谢谢!
lu xiaojian:
回复 yakun song:
后来经过调试后,发现擦除扇区A的话,RAM中的数据会被改变,包括CAN和定时器的配置,还有搬运到RAM中的flash api,不知道为什么RAM会被改动的?
我是打算通过CAN通信,将收到的数据写入flash中。不调用FLash的 API的话,通信是没问题的;
图1:加入flash的API出现CAN通信问题
图2:加入Flash的API出现问题后,还抓到一帧正常的
图3:没有调用Flash的API,正常能进行CAN通信
希望大家给个建议指导下,谢谢!
lu xiaojian:
回复 Seven Han:
请问下,我参考controlSUITE中例程:C:\ti\controlSUITE\libs\utilities\flash_api,使用的2806芯片,里面的例程只擦除了扇区B和扇区C,一旦我擦除了A和D之后,就会出现问题,我看了例程,程序中有将代码从flash中copy到RAM中,为什么不能全部擦除?
我是打算通过CAN通信,将收到的数据写入flash中。不调用FLash的 API的话,通信是没问题的;
图1:加入flash的API出现CAN通信问题
图2:加入Flash的API出现问题后,还抓到一帧正常的
图3:没有调用Flash的API,正常能进行CAN通信
希望大家给个建议指导下,谢谢!
hu vison:
回复 lu xiaojian:
你的loader是放在A区的,把A区擦了,可能loader的数据被破坏了,先确认在擦除A区前,loader的所有数据都已经搬到RAM中了。我做过loader在A区然后烧写其他区的,也做过loader在RAM,然后烧写整个Flash的。但像你这样loader在A区,又想烧写整个Flash的,还没试过。