﻿DOCX D:\Project\spinal_stim\详细设计\【SpinalStim】系统软件设计与调试 .docx
paragraphs=169 tables=9 shapes=34
P0||drawings=0|rels=|【SpinalStim】系统软件设计与调试
P1||drawings=0|rels=|联调进度：
P3||drawings=0|rels=|2026-05-11
P6||drawings=0|rels=|1. 硬件方案
P7||drawings=0|rels=|1.1 硬件架构
P8||drawings=0|rels=|采用FPGA架构
P9||drawings=0|rels=|实现整体数据采集，刺激，阻抗测量与数据传输
P10||drawings=0|rels=|支持USB 2.0接口
P11||drawings=0|rels=|通过更换前端接口板，实现快速采集/刺激功能/通道数的切换，方便科研与调试
P12||drawings=0|rels=|[该同步块已在源文档删除]
P14||drawings=0|rels=|1.2 控制逻辑
P16||drawings=0|rels=|1.2.1 差分采集部分
P18||drawings=0|rels=|1.2.2 32通道单端采集部分
P21||drawings=0|rels=|1.3 接口
P22||drawings=0|rels=|1.3.1 JTAG接口
P24||drawings=0|rels=|1.3.2 指示灯
P27||drawings=0|rels=|2. 软件框架
P28||drawings=0|rels=|2.1 PS软件设计
P31||drawings=0|rels=|2.2 PL软件设计
P34||drawings=0|rels=|2.2.1 FPGA逻辑设计
P35||drawings=0|rels=|（1） 总体设计原理
P36||drawings=0|rels=|整体系统都工作在统一时钟clk（100MHz）和统一复位rst_n中，clk（100MHz）通过外部晶振给PS端，PS端 将其倍频到100MHz输入到PL，rst_n也从PS端过来。
P37||drawings=0|rels=|PS端配置4个脑电ads1299和1个肌电ads1299采集和上传，主要配置ads1299初始化、采样率、通道映射、上传通道选择、帧头数据包、一帧上传数据包数等，PL中eeg_top模块根据配置指令将ads1299初始化，并从ads1299中采集数据，采集数据封包后将其传给upload_top模块。upload_top模块根据PS端配置的通道映射、上传通道选择、帧头数据包、一帧上传数据包数等将eeg_top过来的数据包加上包头、包尾、以包数为单位封帧（如一帧由20个小包组成），另外将需要上传的通道捡出来，把不需要上传的通道舍弃。4个脑电ads1299、和1个肌电ads1299数据（肌电为1组）最后在eeg_emg_upload模块整体处理，根据PS端配置，如果是第一组和第二组都有的话，则将第一组的尾和第二组的头去掉，重新计算crc，如果单独是第一组或者第二组，则将原始数据上传。
P39||drawings=0|rels=|PS端通过PL端的SPI接口（IP核）控制CSI040的写入和读取，进而控制刺激输出。
P41||drawings=0|rels=|（2）寄存器配置
P42||drawings=0|rels=|a. 脑电采集寄存器
P43||drawings=0|rels=|a1：脑电数据采集寄存器：
P44||drawings=0|rels=|脑电EEG_CONFIG对应PS端BRAM_CTRL_1，地址范围是0x4200_0000~0x4200_1FFF，                  配置寄存器如下：
P45||drawings=0|rels=|a2：脑电数据上传寄存器：
P46||drawings=0|rels=|脑电UPLOAD_CONFIG对应PS端BRAM_CTRL_4，地址范围是0x48000000~0x48001fff
P47||drawings=0|rels=|b. 肌电采集寄存器
P48||drawings=0|rels=|b1：肌电数据采集寄存器：
P49||drawings=0|rels=|肌电EEG_CONFIG对应PS端BRAM_CTRL_2，地址范围是x4400_0000~0x4400_1FFF，配置寄存器如下：
P50||drawings=0|rels=|b2：肌电数据上传寄存器：
P51||drawings=0|rels=|肌电UPLOAD_CONFIG对应PS端BRAM_CTRL_5，地址是0x4a000000~0x4a001fff，配置寄存器如下：
P52||drawings=0|rels=|c.电流配置寄存器
P53||drawings=0|rels=|电流配置寄存器对应PS端BRAM_CTRL_6，地址是0x4c000000~0x4c001fff，配置寄存器如下：
P54||drawings=0|rels=|d.数据上传配置寄存器
P55||drawings=0|rels=|数据上传配置寄存器对应PS端BRAM_CTRL_7，地址范围是0x4E00_0000~0x4E00_1FFF，配置寄存器如下：
P56||drawings=0|rels=|e.透明数据上传（不经过打包，用于计算阻抗）为axi_dma_2，地址是0x4042_0000~0x4042_FFFF。
P58||drawings=0|rels=|其它用spi和gpio的地址范围
P59||drawings=0|rels=|A64包字节计算：
P60||drawings=0|rels=|EEG和EMG都有：
P61||drawings=0|rels=|EEG数据量：以20个包为一帧计算，包头85个字节，中间数据为196字节（64通道x3+4字节trigger）x20，包尾为2字节crc+12字节upload_bytes。20个包EEG数据量为4019个字节。因此m个通道，n个包，EEG字节数量为85+（mx3+4）xn+14=99+（mx3+4）xn。
P62||drawings=0|rels=|EMG数据量：如果EEG也存在的话，EMG会去掉包头、包尾，只剩下数据。EMG字节数为4字节trigger+8通道x3字节=28个字节。28x20个包=560个字节。因此c个通道，n个包，EMG字节数量为（cx3+4）xn
P63||drawings=0|rels=|只有EEG时：99+（mx3+4）xn。
P64||drawings=0|rels=|只有EMG时：99+（cx3+4）xn。
P65||drawings=0|rels=|EEG和EMG都没有时：0
P67||drawings=0|rels=|A64包字节计算汇总：
P68||drawings=0|rels=|SpinalStim系统软件设计与调试配置寄存器中eeg_send_package_num[15:0]和emg_send_package_num[15:0]根据eeg_emg_sel[1:0]配置，和上面表格对应,eeg_send_package_num[15:0]配置为99+（mx3+4）xn，emg_send_package_num[15:0]配置为99+（cx3+4）xn。
P70||drawings=0|rels=|如果速率是v（如速率是16k），则每包之间间隔是1000/v（us），emg每个包占用时间是290ns（28个数据（8通道x3个字节+4个trigger）x10ns+10ns无效时间），如果一次emg和eeg合并n个包（比如160个包或者320个包），则emg合并到eeg包尾占用时间是290nsxn/1000（us）=0.29n，如果0.29n>1000/v，则emg合并到eeg包尾占用时间比eeg每个包之间的间隔时间还要长，因此不能正确传输，只有0.29n<1000/v-5才可以（n是包数，v是速率），5us是安全冗余。
P71||drawings=0|rels=|3. 调试记录
P74||drawings=0|rels=|USB隔离器VCC1没有电源输入，芯片无法工作。需要将1/5引脚连接在一起。
P76||drawings=0|rels=|单端采集通道采集信号有点差(100uV)
P78||drawings=0|rels=|差分通道信号也差，和C256 HV 版 类似，将滤波电容从47pF 改到470pF 有改善
P79||drawings=0|rels=|右腿驱动的输出比较怪
P80||drawings=0|rels=|正常量就有2.5V的 50hz输出，正常情况下应该很小
P81||drawings=0|rels=|差分通道用AFE968 测量阻抗时 约有10k 的零漂， 原因未知
P82||drawings=0|rels=|AFE968 的阻抗测量电流与IPA1299 ADS1299 均不相同，方案确定后不可更换
P83||drawings=0|rels=|AFE968 用AC 测阻抗时 需要控制 一些AFE968 独有的寄存器，需要修改PL ，下周可以试试
P84||drawings=0|rels=|将AFE968 更换为ADS1299 后 约0.24k的零漂
P85||drawings=0|rels=|ADS1299,AFE968 通过SRB1,SRB2 均有一些奇怪的表现
P86||drawings=0|rels=|连接SRB2 时， 和两个都断开几乎一致
P87||drawings=0|rels=|连接SRB1，不连接SRB2 时 电压会出现明显的负值， 用示波器上也能看出在-2V左右，非常奇怪
P88||drawings=0|rels=|目前两个开关打开
P89||drawings=0|rels=|AFE968 的校准公式约为
P90||drawings=0|rels=|（x-2000)/0.62 - 9500（内置的3阶 滤波器会带来约0.72的衰减，硬件自带2k阻抗）
P91||drawings=0|rels=|ADS1299 的校准公式为
P92||drawings=0|rels=|（x-2000)/0.72/0.9 - 300（内置的3阶 滤波器会带来约0.72的衰减，硬件自带2k阻抗）
P94||drawings=0|rels=|4. 测试记录
P95||drawings=0|rels=|1. 测试连接
P96||drawings=0|rels=|（1）单端信号测试连接：直接相连即可
P98||drawings=0|rels=|（2）差分信号测试连接：第一幅图中注意凸口方向，第二幅图中端口6、7和PCB板上最底下两个端口对应，对应之后将第一幅图中接口pin脚先标上，凸口再朝下插上即可
P102||drawings=0|rels=|2. 单端信号测试
P103||drawings=0|rels=|2026年07月24：外面信号发生器一端接测试工装ref、一端接测试工装信号端（32通道连在一起），单端信号每次可以测32个通道，8个通道一个页面，只展示8个通道，信号质量基本一致，其它通道请查看附件。
P104||drawings=0|rels=|（1）10uV、6Hz-CH1~8
P106||drawings=0|rels=|（2）20uV、6Hz-CH1~8
P108||drawings=0|rels=|（3）30uV、6Hz-CH1~8
P110||drawings=0|rels=|（4）40uV、6Hz-CH1~8
P112||drawings=0|rels=|（5）50uV、6Hz-CH1~8
P114||drawings=0|rels=|（6）60uV、6Hz-CH1~8
P116||drawings=0|rels=|（7）70uV、6Hz-CH1~8
P118||drawings=0|rels=|（8）80uV、6Hz-CH1~8
P120||drawings=0|rels=|（9）90uV、6Hz-CH1~8
P122||drawings=0|rels=|（10）100uV、6Hz-CH1~8
P124||drawings=0|rels=|（11）110uV、6Hz-CH1~8
P126||drawings=0|rels=|（12）120uV、6Hz-CH1~8
P128||drawings=0|rels=|（13）130uV、6Hz-CH1~8
P130||drawings=0|rels=|（14）140uV、6Hz-CH1~8
P132||drawings=0|rels=|（15）150uV、6Hz-CH1~8
P134||drawings=0|rels=|2026年07月28：外面信号发生器一端接测试工装ref和主板上的gnd、一端接测试工装信号端（32通道连在一起），单端信号每次可以测32个通道，8个通道一个页面，只展示8个通道，信号质量基本一致，其它通道请查看附件。连接方式如下：
P136||drawings=0|rels=|（1）2uV、6Hz-CH1~8
P138||drawings=0|rels=|（2）5uV、6Hz-CH1~8
P140||drawings=0|rels=|（3）10uV、6Hz-CH1~8
P142||drawings=0|rels=|由此可知，单端必须要接ref和gnd，信号才好很多。
P143||drawings=0|rels=|3. 差分信号测试
P144||drawings=0|rels=|差分信号每次可以测1个通道，只展示1个通道，8个通道信号质量基本一致，其它通道请查看附件。
P145||drawings=0|rels=|（1）1uV、6Hz-CH1
P147||drawings=0|rels=|（2）2uV、6Hz-CH1
P149||drawings=0|rels=|（3）3uV、6Hz-CH1
P151||drawings=0|rels=|（4）4uV、6Hz-CH1
P153||drawings=0|rels=|（5）5uV、6Hz-CH1
P155||drawings=0|rels=|（6）10uV、6Hz-CH1
P157||drawings=0|rels=|（7）1mV、6Hz-CH1
P159||drawings=0|rels=|完整附件如下：
P160||drawings=0|rels=|[spinal_stim单端和差分信号测试.zip]
P161||drawings=0|rels=|5. 测试工装开发
P162||drawings=0|rels=|1. 测试工装航空插头线序
P164||drawings=0|rels=|[测试工装开发.docx]
TABLE 0 6x5
序号 | 指示灯 | 状态 | 网络信号 | 引脚
1 | 电源指示灯 | 上电常亮 | LED_PWR | 
2 | WIFI指示灯 | 未连接WIFI，长灭 / 已连接WIFI，未连接上位机，2Hz呼吸 / 已连接上位机，常亮 | LED_WIFI | 
3 | 充电指示灯 | 充电中，常亮 / 充电完成，长灭 | CHGLED | 
4 | 刺激指示灯 | 刺激中，常亮，否则长灭 | LED_STIM | 
5 | 状态指示灯 |  | LED_IDLE | 
TABLE 1 8x7
No | 寄存器名称 /  | 位数 | 方向 | 地址（eeg_bram地址） | 寄存器含义 | 备注 / 
1 | test_ro | 32 /  | RO | 13'h0 | 32'h12345678，常数，只读，PS端验证读寄存器是否正常 | 
2 | test_data /  | 32 | WR | 13’h4 /  | 测试读写寄存器是否正常 | 
3 | eeg_er | 32 | W | 13’h40 | PS端配置ADS1299采集命令等，主要配置接收使能 |   / 
4 | eeg_cr | 32 | W | 13’h44 /  | PS端配置ADS1299采集命令等，主要配置接收cs和接收长度 | [1:0]、[5:4]、[9:8]、[13:12]、[17:16]为send_cs_n，[3:2]、[7:6]、[11:10]、[15:14]、[19:18]为send_length，send_length设置为3，表示下发3个字节的配置数据
5 | eeg_sr | 32 | RO | 13’h48 | PS端读取数据，外部未接信号，这个寄存器其实是弃用寄存器 | 
5 | eeg_tr | 128 | W | 13’h100 /  | PS端配置ADS1299采集命令等，主要配置初始化数据、采样率等 |  
6 | eeg_rr | 128 | RO | 13’h200 | PS端读取ADS1299配置返回的数据 | 和采集的数据需要区分
TABLE 2 11x7
No | 寄存器名称 /  | 位数 | 方向 | 地址（eeg_bram地址） | 寄存器含义 | 备注 / 
1 | test_ro | 32 | RO | 13'h0 | 32'h12340004，常数，只读，PS端验证读寄存器是否正常 | 
2 | test_data | 32 | WR | 13’h4 | 测试读写寄存器是否正常 | 
3 | bram_addr_sel /  | 2 | W | 13’h10 /  | [0]:eeg_sel，选择eeg上传数据与否 / [1]:protocol_sel：选择protocol数据与否 | 
4 | upload_round_qty_set | 32 | W | 13’h14 | 上传到PS端多少个包组成一帧 /  |  例如20个小包组成一帧，帧结尾是tlast，每个小包根据配置的通道数量对应多少个数据
5 | pre_message_length /  | 8 | W | 13’h18 /  | 帧头有多少个数据 /  | 
6 | reset_package_id | 1 /  | W | 13’h1c /  | 复位包id计数，1：复位，0：维持 | 
7 | package_overtime_ms | 32 | W | 13’h20 /  | 设置包计数超时时间 /  | 
8 | pre_message | 192 /  | W | 13’h100 | 设置帧头，192bit，从100地址开始设置 |  
9 | ch_mapping2pc | 512 | W | 13’h200 | 设置通道映射，即和软件端显示的通道需要对应配置 | 
10 | upload_ch | 64 | W | 13’h300 /  | 上传通道选择，PL先采集所有通道数据，然后根据PS端配置哪些通道需要上传数据，将对应通道数据上传 | 
TABLE 3 8x7
No | 寄存器名称 /  | 位数 | 方向 | 地址（eeg_bram地址） | 寄存器含义 | 备注 / 
1 | test_ro | 32 /  | RO | 13'h0 | 32'h12345678，常数，只读，PS端验证读寄存器是否正常 | 
2 | test_data | 32 | WR | 13’h4 /  | 测试读写寄存器是否正常 | 
3 | eeg_er | 32 | W | 13’h40 | PS端配置ADS1299采集命令等，主要配置接收使能 |   / 
4 | eeg_cr | 32 | W | 13’h44 /  | PS端配置ADS1299采集命令等，主要配置接收cs和接收长度 | 现在：以前：[1:0]、[6:5]、[11:10]、[16:15]、[21:20]为send_cs_n，[4:2]、[9:7]、[14:12]、[19:17]、[24:22]为send_length，send_length设置为4，表示下发4个字节的配置数据 / 以前：[1:0]、[5:4]、[9:8]、[13:12]、[17:16]为send_cs_n，[3:2]、[7:6]、[11:10]、[15:14]、[19:18]为send_length，send_length设置为3，表示下发3个字节的配置数据
5 | eeg_sr | 32 | RO | 13’h48 /  | PS端读取数据，外部未接信号，这个寄存器其实是弃用寄存器 | 
5 | eeg_tr | 128 | W | 13’h100 /  | PS端配置ADS1299采集命令等，主要配置初始化数据、采样率等 |   / 
6 | eeg_rr | 128 | RO | 13’h200 | PS端读取ADS1299配置返回的数据 | 和采集的数据需要区分
TABLE 4 11x7
No | 寄存器名称 /  | 位数 | 方向 | 地址（eeg_bram地址） | 寄存器含义 | 备注 / 
1 | test_ro | 32 | RO | 13'h0 | 32'h12340004，常数，只读，PS端验证读寄存器是否正常 | 
2 | test_data | 32 | WR | 13’h4 | 测试读写寄存器是否正常 | 
3 | bram_addr_sel | 2 | W | 13’h10 /  | [0]:eeg_sel，选择eeg上传数据与否 / [1]:protocol_sel：选择protocol数据与否 | 
4 | upload_round_qty_set | 32 | W | 13’h14 | 上传到PS端多少个包组成一帧 /  |  例如20个小包组成一帧，帧结尾是tlast，每个小包根据配置的通道数量对应多少个数据
5 | pre_message_length /  | 8 | W | 13’h18 /  | 帧头有多少个数据 /  | 
6 | reset_package_id | 1 | W | 13’h1c /  | 复位包id计数，1：复位，0：维持 | 
7 | package_overtime_ms | 32 | W | 13’h20 /  | 设置包计数超时时间 /  | 
8 | pre_message | 192 /  | W | 13’h100 | 设置帧头，192bit，从100地址开始设置 |  
9 | ch_mapping2pc | 512 | W | 13’h200 | 设置通道映射，即和软件端显示的通道需要对应配置 | 
10 | upload_ch | 64 | W /  | 13’h300 /  | 上传通道选择，PL先采集所有通道数据，然后根据PS端配置哪些通道需要上传数据，将对应通道数据上传 | 
TABLE 5 19x7
No | 寄存器名称 | 位数 | 方向 | 地址（eeg_bram地址） | 寄存器含义 | 备注
1 | test_ro | 32 | RO | 13'h0 | 32'h22222222，常数，只读，PS端验证读寄存器是否正常 | 
2 | test_data | 32 | WR | 13’h4 | 测试读写寄存器是否正常 | 
3 | cnv_en /  | 1 | W | 13’h8 /  | [0]:FPGA停止控制AD7689 / [1]:FPGA开始控制AD7689 | 
4 | clear_int | 1 | W | 13’hc | 清除寄存器，将cur_monitor模块中的电流处理相关数清除 | 
5 | cfg_reg /  | 14 | W | 13’h10 | AD7689中的写入寄存器的数值，未用 | 
6 | cnv_period_us | 32 | W | 13’h14 | AD7689采样率配置，未用 | 复位值：32'd1000
7 | flt_ch | 16 | RO | 13’h18 | 电流处理后的对应通道有效 | 
8 | thr_total_cur | 32 | W | 13’h20 | 整体电流阈值控制 | 复位值：0
9 | thr_pos_cur | 32 | W | 13’h24 | 正电流阈值控制 |  复位值：0
10 | thr_neg_cur | 32 | W | 13’h28 | 负电流阈值控制 | 
11 | flt_state | 32 /  | RO | 13’h30 /  | 电流状态寄存器 / flt_state = {28'd0, flt_bits}; / flt_bits = {cur_flt_neg, cur_flt_pos, cur_flt_total, cur_flt_ch}; / 即负电流超过阈值指示、正电流超过阈值指示、总体电流超过阈值指示、通道号指示回读 | 
12 | flt_total_cur | 32 | RO | 13’h34 | 整体电流回读 | 
13 | flt_pos_cur | 32 | RO | 13’h38 | 正电流回读 | 
14 | flt_neg_cur | 32 | RO | 13’h3C | 负电流回读 | 
15 | ch_map | 8 | W | 13’h400~13’h440 | 通道映射配置 | 总共16个8bit数据
16 | cur_thr | 16 | W | 13’h800~13’h840 | 每个通道电流阈值控制 | 总共16个16bit数据
17 | cur_rt | 16 | RO | 13’hC00~13’hC40 | 每个通道电流值回读 | 总共16个16bit数据
18 | cur_fault | 16 | RO | 13’h1000~13’h1040 | 通道对应的电流值回读 | 总共16个16bit数据
TABLE 6 5x7
No | 寄存器名称 | 位数 | 方向 | 地址（stim_bram地址） | 寄存器含义 | 备注
1 | eeg_emg_sel /  | 2 | W | 13’h30 | eeg和emg选择使能，[1]:emg选择使能，[0]:eeg选择使能 / eeg_emg_sel[1:0]=2'b11,emg和eeg都有 / eeg_emg_sel[1:0]=2'b10,只有emg / eeg_emg_sel[1:0]=2'b01,只有eeg / eeg_emg_sel[1:0]=2'b00,两者都没 | 
2 | eeg_send_package_num | 16 | W | 13’h34 | eeg需要上传的字节数，如一帧里面有4011个字节，则需要发10进制4011，或者16进制16'hfab | 
3 | emg_send_package_num | 16 | W | 13’h38 /  | emg需要上传的字节数，如一帧里面有4011个字节，则需要发10进制4011，或者16进制16'hfab | 
4 | diff_pkt_data_sel | 1 | W | 13’h3C /  | 选择是上传差分打包数据还是8通道原始数据 / 0：默认差分打包数据 / 1：选择差分8通道原始数据 | 如果配置成1，则差分打包数据不上传，相当于eeg_emg_sel中没有emg的数据
TABLE 7 11x6
No | PS端名称 | 位数 | 地址范围 | 含义 | 备注
1 | CHANN_EN /  | 4 | 0x4121_0000~0x4121_FFFF | 控制4个8通道选择器通断，每个bit1个，和CHANN_SEL[3:0]配合 | GPIO,非GPIO2
2 | CHANN_SEL | 4 | 0x4122_0000~0x4122_FFFF | 控制4个8通道选择器通断，4bit对应8个通道，和CHANN_EN[3:0]配合 | GPIO,非GPIO2
3 | RST_AD5941 | 1 | 0x4123_0000~0x4123_FFFF | AD5941复位控制GPIO | GPIO,非GPIO2
4 | Z_IO | 1 | 0x4124_0000~0x4124_FFFF | 输入到AD5941 | GPIO,非GPIO2
5 | ZCHECK_SPI | 4 | 0x41E2_0000~0x41E2_FFFF | 控制AD5941 | SPI
6 | ELEC_MUX_IN | 4 | 0x4126_0000~0x4126_FFFF | 控制ADG1212，主要控制ELEC_BIAS、ELEC_REF、ZCHK_IN等的选择 | GPIO，非GPIO2
7 | STIM_SPI | 4 | 0x41E0_0000~0x41E0_FFFF | PS端控制CSI040的SPI端口 | SPI
8 | CUR_SPI | 4 | 0x41E1_0000~0x41E1_FFFF | PS端控制AD7689的SPI端口 | SPI
9 | gpio_0 /  | 8 /  | 0x4120_0000~0x4120_FFFF /  | gpio0[7]：mux_pwr_en，新增模拟开关电源控制引脚，启用采集功能前打开 / gpio0[6]：stim_pwr_en(STIM_PWR_EN) / gpio0[5]：led_usb / gpio0[4]：led_stim，刺激灯状态指示 / gpio0[3]：led_state，灯状态指示 / gpio0[2]：rec_pwr_en / gpio0[1]：pudc / gpio0[0]：led_rsv  | 配置led_wifi等，GPIO2,非GPIO / 
10 | GPIO | 3 | 0x4125_0000~0x4125_FFFF /  | gpio[2]：rstn_stim / gpio[1]：stim_trig / gpio[0]：stim_int | 配置刺激芯片GPIO，顺序也可以由PS端自己定义
TABLE 8 5x5
No. | EEG、EMG组合 / eeg_emg_sel / [1:0] | 包数计算 /  | 参数含义 | 举例
1 | 2'b11,emg和eeg都有 /   | 99+（mx3+4）xn+（cx3+4）xn | m:EEG通道数， / n:EEG或者EMG包数 / c:EMG通道数 | 以EEG通道数64、EMG通道数为8，20个包计算，总包数：99+（64x3+4）x20+（8x3+4）x20=4579字节
2 | 2'b01,只有eeg /   | 99+（mx3+4）xn | m:EEG通道数， / n:EEG或者EMG包数 / c:EMG通道数 | 以EEG通道数64，20个包计算，总包数：99+（64x3+4）x20=4019字节
3 | 2'b10,只有emg /   | 99+（cx3+4）xn | m:EEG通道数， / n:EEG或者EMG包数 / c:EMG通道数 | 以EMG通道数为8，20个包计算，总包数：99+（8x3+4）x20=659字节
4 | 2'b00,两者都没 | 0 | m:EEG通道数， / n:EEG或者EMG包数 / c:EMG通道数 | 0
