- 主题:两个mcu共享一片flash,能做到吗?
两个mcu都只会读flash,目前想到的办法是每个mcu要读之前,先读一下flash cs引脚的状态,为高才继续。但这样貌似也不能百分百安全,如果两个mcu恰好步调非常一致,恰好同时读cs,此时可能出现同时读flash的情况
--
FROM 223.104.9.*
加个互锁啥意思?能详细说一下吗
【 在 Multimeter 的大作中提到: 】
: cs加个互锁
: 发自「今日水木 on V1934A」
--
FROM 223.104.9.*
还是没明白,给CS加个非门能起个啥作用呢?
【 在 jiu 的大作中提到: 】
: 就是加个非门
:
--
FROM 183.222.204.*
领导的指示,理解不理解都要执行,不容置疑
【 在 Ylong 的大作中提到: 】
: 我觉得如果这么做省不了六位数的钱就是穷折腾。当然,为了给公司创造就业岗位另当别论。
:
: #发自zSMTH@RMX1991
--
FROM 183.222.204.*
就是存MCU的firmware和一些配置。最好不新增硬件,因为我理解这个改动本来就是想省成本
【 在 liu7894 的大作中提到: 】
: 你这个flash 是干什么的?
: 如果非要这么弄,你在2个mcu 之间建立一个通信,用通信来同步读取操作。
:
--
FROM 183.222.204.*
没有片内flash,只有4k片内otp存bootloader,也没有串口,公司自己的芯片,非常小众,市面上买不到的。两个mcu的应用程序都存在flash中,各自的bootloader会从flash中加载程序,理想的情况:第一个mcu先加载,然后第二个再加载,第二个会稍有延迟,但很短。现在的问题就是同步,要让两个mcu互斥访问flash。另外,两个mcu在运行过程中可能也会异步访问flash读取某些配置项
【 在 liu7894 的大作中提到: 】
: 你的mcu 没有片内的flash?
: 如果2个mcu 的固件都要存在这个flash里,并自行引导的话,你这个想法是错误的。
: 你能说这2个mcu的型号吗?
: ...................
--
修改:aventadors FROM 223.104.9.*
FROM 223.104.9.*
其实就是一个mcu在访问时,比如将某个gpio拉低,另一个mcu访问前需要先去判断这个gpio状态,只有是高的时候才可访问。是这意思吗?
【 在 feiy 的大作中提到: 】
: 1. 随便找个共享的状态变量,实现互斥。确保一个MCU在访问时,另外一个不能访问需要等待。这个状态可以是实际的状态电平,也可以是两个MCU之间的通信交互
: 2. 每个MCU访问完外部FLASH后,记得将MOSI/SCK/CS对应的管脚,临时配置为无上拉的IO高阻输入,从而可以减少对另外一个MCU访问的干扰。
:
--
FROM 223.104.9.*
ram也非常小,不足以一次性将firmware和配置全部加载进去,就如我主贴说的,我现在的想法是,两个MCU各用一个GPIO 连在flash的CS上,每次在读之前,先读此GPIO,若为高,表明此时flash空闲,可读;否则返回重试直到GPIO为低。但有一种情况:若两个MCU恰好同时读CS,此时返回的值都是高,则两个MCU就可能同时读
【 在 liu7894 的大作中提到: 】
: 除非你们能修改bootloader的代码,然后在应用中 使用串口通信做同步。
: 即读配置数据的时候,在应用中 一次性把这些数据读到RAM里。
: 这是不理解,为了一片flash ,这么给自己找麻烦,你们领导估计也是有情节的,哈哈
--
FROM 183.222.204.*
你这个想法看起来跟我的方案类似,我是想两个mcu都直接拿个gpio接flash的cs。
不过这个方案有个问题:假如两个mcu恰好同时拉低gpio呢
【 在 qinwenren 的大作中提到: 】
: 每个MCU各伸出一个GPIO到对方的中断输入脚,自身中断都配置成沿触发模式,哪个MCU要读Flash了,就翻转GPIO,提示对方,资源占用,读取完毕后,再翻转GPIO,提示对方资源空闲。
--
FROM 223.104.9.*
对,我也是这么理解的。看了大家的主意,基本上都是置一个标志(拉低某个gpio),然后对方操作flash之前先去读这个标志。但如果两个mcu同时置了对方的标志呢
【 在 pauljoe 的大作中提到: 】
: 碰撞冲突可以减少,无法避免
: 增加一个同步信号比较简单
--
FROM 223.104.9.*