oogami@panda, 2023-01
主控(ARM)与FPGA之间通过JESD207接口通信。ARM 程序的所有外部通信(接收、发送)均通过 FPGA。ARM 与 FPGA 之间存在预先定义好的接口(.h)和所提供的 .a 静态库。
// FPGA -> ARM
typedef void (*FNCT_U8P_U32 )(unsigned char *u8p_src,int len);
// chnID = 4, ch_name = "/dev/dpb_x1643_phych0", tag = 3
int init_chnl( int chnID,char *ch_name,FNCT_U8P_U32 callbackfunc, int tag );
// ARM -> FPGA
int write_data_to_chnl(int chnID,char* buf,int len);
typedef struct ST_JESD_H
{
INT32U msgID:8; // 消息ID,带优先级, ID越小,优先级越高
INT32U dstUsrID:4; // dst/src 0:aisc 7:rf board 8:io bc 9:dsp 10:HSSI E0 11:ARM 207_2 12:NET 13:SIM 15:io board 2021/8/4 9:15:10
INT32U ctlFractStop:1; // 分片模式的尾帧标志。非分片模式 为 0。
INT32U ctlFractStrt:1; // 分片模式的首帧标志。非分片模式 为 0。
INT32U ctlFractMode:1; // 帧模式 1:分片模式, 0:流模式
INT32U reserved:1; // 保留 0
INT32U sigLen:16; // 帧 payload 部分长度,不含帧头,单位为字节
}ST_JESD_H;
typedef struct
{
ST_JESD_H h;
union
{
// ...
struct {
uint8 channel ;
uint8 asio_dat[RBDP_MAX_DATA_LEN-1] ;
}DN_UP_ASIO;
// ...
};//end of union
}AUD3_ST_JESD;
msgID 0xF0 (AUD3_MSG_UP_ASIO, AUD3_MSG_DN_ASIO)。FPGA ⇒ ARM / ARM ⇒ FPGA。与外部设备的异步串口IO之间接收 / 发送消息。对应 207 消息主体的 DN_UP_ASIO 类型 payload。数据内容存放在 asio_dat 缓冲区里。 外设接口IPC。0-31 对应实际存在的物理串口。≥32 的串口号为后续扩展的虚拟串口(429/203/422//1553/…)。
msgID 0x40 (AUD3_MSG_DN_RCV_FIXF)。ARM ⇒ FPGA。设置电台定频模式下的工作参数(接收频率、调制模式等)。对应 207 消息主体的 DN_RCV_FIXF payload 类型:
typedef struct { // 8 bytes
uint32 channel :14 ;
uint32 channel_mode :2 ; // 通道模式,为0时,支持通道号0~39,为1时,支持通道号0~319,2/3保留
uint32 reserved :8 ;
uint32 ssb_mode :4 ; // 1/2/4/7分别对应边带调制模式USB/LSB/CW/AM
uint32 ssb_bw :4 ; // 0/1/2/3/4/5/6分别对应边带调制带宽BW_0K1/BW_1K2/BW_2K7/BW_3K0/BW_6K0/BW_12K/BW_24K
uint32 freqInHz ; // 十进制,以Hz为单位的收频率
}SET_RCV_FIXF;
struct{
SET_RCV_FIXF set_rcv[40];
}DN_RCV_FIXF;
// 虽然payload里定义了40个。但代码中实际调用该接口时,每次只传入1个频段的定频信息。目前不清楚接口实际上是否支持一次性传入多个定频信息:
typedef struct {
ST_JESD_H h;
SET_RCV_FIXF set_rcv;
} ST_CHXX_RCV_CTRL;
ST_CHXX_RCV_CTRL stChxxRcvCtrl; //xx通道接收控制
AppNetAud3_SubSendPack( AUD3_MSG_DN_RCV_FIXF, sizeof(SET_RCV_FIXF),
(AUD3_ST_JESD *) &stChxxRcvCtrl);
msgID 越小,对应消息的传输优先级越高(FPGA处理)。
UP: ASIC 芯片 ⇒ ARM。DOWN 则相反。中间的传输通过 FPGA 处理和中转。
发送音频(ASIC ⇒ ARM ⇒ ASIC):0x22 ⇒ 0x31 (音频经过 ARM 中转处理:降噪压缩等)
接受音频(ASIC ⇒ ARM ⇒ ASIC):0x21 ⇒ 0x38 (ARM 将音频发送到指定位置,如扬声器)
msgID | 通信方向 | payload | 说明 | 备注 |
---|---|---|---|---|
0xF0 (AUD3_MSG_UP_ASIO, AUD3_MSG_DN_ASIO) | DOWN (ARM ⇒ FPGA) | |||
UP (FPGA⇒ARM) | DN_UP_ASIO | 外部设备串行数据通信 | 根据 channel 区分: |
外部接口可能包括: