STM32 USB CAN 学习笔记 - 共享RAM的用法

时间:2021-12-05 23:15:03

USB 时钟可以一直使能。

如果CAN时钟没有使能,RAM 能被软件读写。(CANBus 不能发送和接受Message)

如果CAN时钟使能,RAM不能软件被写。 CANBus Core 控制此RAM区域。(CANBus 可以发送和接受Message)

CANBus 占用了 256 字节(地址范围 512 字节)。

开始区域是Filters[14] = (F0R0、F0R1), (F1R0、F1R1),  ... (F13R0、F13R1).

紧接着是 Rx0 FiFo[0], Tx0, Tx1, Tx2,  Rx0 FiFo[1], Rx0 FiFo[2], Rx1 FiFo[0], Rx1 FiFo[1], Rx1 FiFo[2]。

USB 可以使用后面的 256 字节。

具体分配可以是 : 8 个端点占用 8 * 8 = 64 Bytes (ADDR、CNT : TX、RX)

最好只使用 3 个端点 : (1) 控制端点 0 (2) In 端点 1 (3)Out 端点 2

控制端点 : 64 bytes

In 端点: 64 Bytes

Out 端点: 64 Bytes



         F8 FF   FF FF      // Filters[0]
F8 FF FF FF
F8 FF FF FF
F8 FF FF FF
F8 FF FF FF
F8 FF FF FF
F8 FF FF FF
F8 FF FF FF
F8 FF FF FF
F8 FF FF FF
000060A0 F8 FF FF FF
000060B0 F8 FF FF FF
000060C0 F8 FF FF FF
000060D0 F8 FF FF FF // Filters[13]

000060E0                    //Rx0 FIFO[0]
000060F0 AB CD EF

                    //Tx0
AB CD EF 0D //Tx1
AB CD EF //Tx2
AB CD EF

 0C                   //Rx0 FIFO[1]
AB CD EF //Rx0 FIFO[2]
AB CD EF 000061A0 1C //Rx1 FIFO[0]
000061B0 AB CD EF 000061C0 //Rx1 FIFO[1]
000061D0 000061E0 //Rx1 FIFO[2]
000061F0

                    //Unused Endpoint

00006250                    //EP0 -- Buffer Table @ 0x0250
C0 //EP1
C0 C0 //EP2

                    //EP0 Buffer
FF FF
000062A0
000062B0
000062C0
000062D0
000062E0
000062F0

                    //EP1 Buffer

 C0        C0
C0 FD 0A 6C
FD C0

                    //EP2 Buffer

000063A0
000063B0
000063C0 8E C2 B4
000063D0 EA 7C C3
000063E0 4A E1 F9 AC CB 3A
000063F0 F1 C0 7B 4F A2
USB    CAN          RAM

Dis    Dis     软件 (不可写入, 读取无意义) 硬件 (没有控制)
Dis En 软件 (不可写入, 读取无意义) 硬件 (CANBus控制)
En Dis 软件 (可写入, 可读取) 硬件 (USB控制)
En En 软件 (不可写入, 读取无意义) 硬件 (CANBus控制)