- 主题:两个mcu共享一片flash,能做到吗?
两个MCU接CS的管脚平时设置为输入,要读写FLSAH检测是否为低电平,如果没有为低电平,证明另外一个mcu没有在读写,再设管脚为输出并拉低CS电平进行flash读写。
【 在 aventadors 的大作中提到: 】
: 你这个想法看起来跟我的方案类似,我是想两个mcu都直接拿个gpio接flash的cs。
: 不过这个方案有个问题:假如两个mcu恰好同时拉低gpio呢
--
修改:kkklu FROM 202.168.191.*
FROM 202.168.191.*
碰撞冲突可以减少,无法避免
增加一个同步信号比较简单
--
FROM 121.69.101.*
对,我也是这么理解的。看了大家的主意,基本上都是置一个标志(拉低某个gpio),然后对方操作flash之前先去读这个标志。但如果两个mcu同时置了对方的标志呢
【 在 pauljoe 的大作中提到: 】
: 碰撞冲突可以减少,无法避免
: 增加一个同步信号比较简单
--
FROM 223.104.9.*
假设存在一个时钟信号,就可以做到时分
时钟信号可以是任一MCU产生
说到底两个MCU需要额外一个IO通道
在自己的工作时间片内,先检测CS状态,空闲则占用,非空闲则等待
【 在 aventadors 的大作中提到: 】
: 对,我也是这么理解的。看了大家的主意,基本上都是置一个标志(拉低某个gpio),然后对方操作flash之前先去读这个标志。但如果两个mcu同时置了对方的标志呢
--
修改:pauljoe FROM 121.69.101.*
FROM 121.69.101.*
用GPIO投票啊,自己的投票结束了再看另外一个是否投票,没投才能去读,都投了就放弃投票然后延时再查看
【 在 aventadors 的大作中提到: 】
: 你这个想法看起来跟我的方案类似,我是想两个mcu都直接拿个gpio接flash的cs。
: 不过这个方案有个问题:假如两个mcu恰好同时拉低gpio呢
--
FROM 112.64.60.*
两个mcu的固件都在共享的flash里面?是的话就搞笑了
【 在 aventadors 的大作中提到: 】
: ram也非常小,不足以一次性将firmware和配置全部加载进去,就如我主贴说的,我现在的想法是,两个MCU各用一个GPIO 连在flash的CS上,每次在读之前,先读此GPIO,若为高,表明此时flash空闲,可读;否则返回重试直到GPIO为低。但有一种情况:若两个MCU恰好同时读CS,此时返回的值都是高,则两个MCU就可能同时读
--
FROM 153.37.230.*
太简单了,你研究一下以太网冲突检测机制就明白了。
--
FROM 222.90.54.*
是,但bootloader存在各自的片内otp falsh中
【 在 l99 的大作中提到: 】
: 两个mcu的固件都在共享的flash里面?是的话就搞笑了
:
--
FROM 117.136.65.*
这个方法确实能解决这个问题,也解决了我之前的一个疑问:两个mcu恰好同时访问怎么办。不过这个算法实现起来有点复杂啊,片内ram只有20k,目前代码基本上已经占完。另一个担心是这个算法会不会降低实时性?我这个是个强实时系统
【 在 weibeiqs 的大作中提到: 】
: 太简单了,你研究一下以太网冲突检测机制就明白了。
--
FROM 117.136.65.*
CSMA/CD只能减少冲突,无法避免,外加需要随机退避
实时性和复杂性明显不如简单的时分信号
有条件的话单独一个IO连接两个MCU,由其中A主控发出时钟信号,双方只允许在各自的时间片上发起读写操作,操作前先检测CS占用情况
或者直接走CS线,还是由A主控发出约定的时钟信号,每次从CS无效翻转为有效前,读取CS是否被B占用;B则监听CS,无效时可抢占
【 在 aventadors 的大作中提到: 】
: 这个方法确实能解决这个问题,也解决了我之前的一个疑问:两个mcu恰好同时访问怎么办。不过这个算法实现起来有点复杂啊,片内ram只有20k,目前代码基本上已经占完。另一个担心是这个算法会不会降低实时性?我这个是个强实时系统
--
FROM 121.69.101.*