- 主题:两个mcu共享一片flash,能做到吗?
碰撞冲突可以减少,无法避免
增加一个同步信号比较简单
--
FROM 121.69.101.*
假设存在一个时钟信号,就可以做到时分
时钟信号可以是任一MCU产生
说到底两个MCU需要额外一个IO通道
在自己的工作时间片内,先检测CS状态,空闲则占用,非空闲则等待
【 在 aventadors 的大作中提到: 】
: 对,我也是这么理解的。看了大家的主意,基本上都是置一个标志(拉低某个gpio),然后对方操作flash之前先去读这个标志。但如果两个mcu同时置了对方的标志呢
--
修改:pauljoe FROM 121.69.101.*
FROM 121.69.101.*
CSMA/CD只能减少冲突,无法避免,外加需要随机退避
实时性和复杂性明显不如简单的时分信号
有条件的话单独一个IO连接两个MCU,由其中A主控发出时钟信号,双方只允许在各自的时间片上发起读写操作,操作前先检测CS占用情况
或者直接走CS线,还是由A主控发出约定的时钟信号,每次从CS无效翻转为有效前,读取CS是否被B占用;B则监听CS,无效时可抢占
【 在 aventadors 的大作中提到: 】
: 这个方法确实能解决这个问题,也解决了我之前的一个疑问:两个mcu恰好同时访问怎么办。不过这个算法实现起来有点复杂啊,片内ram只有20k,目前代码基本上已经占完。另一个担心是这个算法会不会降低实时性?我这个是个强实时系统
--
FROM 121.69.101.*
再来一个更简单粗暴的方法,还是走CS线,不主动提供时钟信号
A需要先拉1时间单位有效信号,释放1时间单位
B需要先拉2时间单位有效信号,释放1时间单位
A的占用标志是1+0+1,需要B用2.x个时间单位来监听判定
B的占用标志是1+1+0+1,需要用3.x个时间单位来监听判定
缺点是B的优先级高
--
FROM 121.69.101.*
CSMA/CD只是减少碰撞概率
你自己说的极端情况是无法避免的
【 在 aventadors 的大作中提到: 】
: “A需要先拉1时间单位有效信号”,是指A把CS拉低一个时间单位?
: 我其实觉得带随机回退的CSMA/CD算法是个完美的方案,就是实现的复杂度比较高,还可能影响实时性
--
FROM 124.64.120.*