❶ can总线 sja1000
http://blog.21ic.com/user1/1003/archives/2005/3398.html
假设我们先不考虑BTR0中的SJW位和BTR1中的SAM位。那么,BTR0和BTR1就是2个分频系数寄存器;它们的乘积是一个扩展的分频系数。即:
BTR0×BTR1=F_BASE/Fbps (1)
其中:
内部频率基准源F_BASE = Fclk/2,即外部晶振频率Fclk的2分频。注意任何应用中,当利用外部晶振作为基准源的时候,都是先经过2分频整形的。
(1)式中,当晶振为16M时,F_BASE=8000K
当晶振为12M时,F_BASE=6000K
Fbps就是我们所希望得到的CAN总线频率。单位为K。
设(1)式中BTR0=m,BTR1=n,外部晶振16M,则有:
n =8000/ Fbps (2)
这样,当Fbps取我们希望的值时,就会得到一个m * n的组合值。当n选定,m值也唯一。
n值CAN规范中规定8~25。(也就是BTR1的值)基本原则为:Fbps值越高时,选取n(通过设置BTR1)值越大。其原因不难理解。
我假定一般应用中选取n=10,也就是:
同步段+相位缓冲段1+相位缓冲段2 =1+5+4
则(2)式简化为
m=800/Fbps
m的最大设置值为64,SJA1000最大分频系数m*n=64x25=1600。因此标准算法中通常以16M晶振为例。其实有了公式(1),任何晶振值(6M~24M)都很容易计算。
SAM的确定:低频时,选SAM=1,即采样3次。高频100K以上时,取SAM=0,即采样1次。
SJA重同步跳宽选取: 与数字锁相环技术有关。n值选得大时,SJA可以选得大,即一次可以修正多个脉冲份额Tscl。n值小或频率低时,选SJA=1。即BTR0.7和BTR0.6都设为0。
简单办法,下个波特率计算器试试。
❷ SJA1000的RX1、TX1跟TX0、RX0的关系
SJA1000的TX0/TX1,RX0/RX1在不使用外接驱动器的情况下是设计直接接CAN总线CANH/CANL的,这时,把TX0和RX0短接,TX1和RX1短接后分别挂到CANH、CANL即可。要注意的是,SJA1000内部发送驱动器TP/TN场效应管不知有无过流保护电路,为可靠起见,最好将电源经过限流电阻再接到VDD2/VDD3管脚。(或者采用限流电源100MA)。VDD2/VSS2V对应TX0发送驱动器的供电,DD3/VSS3对应TX1发送驱动器的供电电源。VDD1/VSS1是芯片电源。
显然我们一般是用外接CAN总线驱动器82C250一类的。其输入TX、输出RX,是单极性。这时用SJA1000的TX0/TX1或者RX0/RX1管脚应该是一样的,但由于TX1和RX1内部电路设计赋予了其他功能,所以只用TX0和RX0与82C250驱动器相接。下面入正题:
RX0和RX1是SJA1000内部差分接收比较器A的两个输入端,不用外接总线驱动器时对应接CANH、CANL,现在是单极性输入到RX0,那么RX1应该接到CAN电平(比较器电平)中点,即2.5V。这就是总线驱动器一般都供给参考电压2.5V的原因。这时要注意的前题是:CDR寄存器中的CBP位必须设置为“0”。
CBP位控制芯片内部差分比较器A附加的一个电子开关B,B像一个接在比较器A(-)输入端的单刀双掷开关,(比较器A(+)输入端接了RX0。)一掷接RX1,另一掷接比较器输出端;这样,通过电子开关B的切换,差分比较器A要么是比较器,要么是跟随器。当CBP=1时,它是跟随器(整形电路)。RX1管脚这时悬空,接哪里或者不接按道理都行。由于它引入到芯片内部,悬空可能引入噪声,所以手册建议将RX1接一固定电平,VDD/VSS/2.5V均可。另:跟随器减少了比较器的延时,这就是手册上说的CBP=1时,可以减少信号延时,放宽总线距离的原因。
结论:如果不清楚电子线路(运算放大器、比较器、跟随器、N/P沟道场效应管等等电路),只要将SJA1000的RX1管脚接到总线驱动器82C250一类的参考电压输出端Vref即可,这时无论CBP位设置1/0,通信都能正常进行。
这只是原理上解释为什么有些书上的RX1接地,有些书又接Vref。
电子开关B也许是接在比较器A的下一级的输入上,然后一掷接比较器A输出,一掷接RX0输入,当CBP=0时,开关连接A输出,断开RX0。
当CBP=1时,开关连接RX0,断开A输出,这样真正跨越了比较器A的延时。(这时RX1接什么已经无所谓了)。
跟随器叙述好像不严格。不过原理是这样。
❸ SJA1000发送数据的波形总是只有一个低起始,后面就是高电平,FPGA配置,读写寄存器都没问题
采用基于ARM微处理器的单板机系统建立...S3C44B0x 的数据、地址和控制信号线...总线上的设备节点之间直接通过SJA1000...这些缓冲页的一部分作为接收缓冲区,...
❹ ARM读写sja1000的问题
果真的是需要用到6个独立的CAN通道的话,可以这样加SJA1000)
2、用Intel或者Moto总线方式,分地址去读写每个SJA1000,接收发送的时候有中断提示的。这样本身就很容易区分开CAN的控制。
3、ARM的对各个SJA1000任务的切换可以用ARM的操作系统或者其他的方式切换。和其他的控制一样。