1 NSS说明 NSS是片选管脚。分为内部管脚和外部管脚,内部管脚检测到高电平时,SPI工作在主模式;反之,工作在从模式。从设备的NSS管脚可以由主设备的一个标准 I/O 引脚来控制。当有多个从设备的时候,因为每个从设备上都有一个片选引脚接入到主设备机中,当我们的主设备和某个从设备通信时将需要将从设备对应的片选引脚电平拉低或者是拉高。 1.1 软件NSS模式SPI_CTRL1寄存器的SSMEN=1启用软件从设备管理。 该模式下不使用NSS管脚,通过写 SPI_CTRL1 的 SSEL 位驱动内部NSS信号电平(主模式 SSEL=1,从模式SSEL=0)。 1.1.1 代码配置以N32G457的SPI_FLASH例程为例。 1、初始化配置中选择软件NSS: SPI_InitStructure.NSS = SPI_NSS_SOFT; 2、配置PA3做片选脚,模式为GPIO_Mode_Out_PP,做普通GPIO口,根据数据手册可知PA3并非默认SPI引脚,软件片选时可使用任意引脚。 3、根据时序要求,片选脚先在初始化中拉高。 4、擦除/读/写数据/WriteEnable/WaitForWriteEnd等时,发送之前需要置低片选,结束再拉高。 1.2 硬件NSS模式 SPI_CTRL1 寄存器的 SSMEN=0 禁止软件从设备管理。 输入模式:配置为主模式、NSS 输出禁止(MSEL=1, SSOEN=0),允许操作于多主模式。主设备(从设备)在整个数据帧传输期间应把 NSS 脚外接到高电平(低电平)。 输出模式:配置为主模式、 NSS 输出使能(MSEL=1, SSOEN=1), SPI 作为主设备必须将 NSS 拉低,所有被设置为 NSS 硬件模式并与之相连的的 SPI 设备会检测到低电平,自动进入从设备状态。若主设备不能拉低 NSS,则进入从模式,并产生主模式失效错误 MODERR 位置‘1’。 8个时钟/16个时钟内不能发数据。 1.2.1 代码配置以N32G457的SPI_FLASH例程为例,SPI接口做主机,使用输出模式。 1、初始化配置中选择软件NSS: SPI_InitStructure.NSS = SPI_NSS_HARD; 2、硬件NSS需要选择输入模式还是输出模式,此次是操作flash,应该配置输出模式。 3、配置GPIO,根据数据手册可知PA4是SPI1_NSS脚,即硬件片选脚。配置模式为GPIO_Mode_AF_PP,复用时NSS需配置空闲状态,空闲时NSS为1。 4、 在每一次操作后关闭SPI,操作前打开,防止SPI因为连续发字节,自动进入连续模式,片选无法拉高。
1.3 NSS模式选择 软件模式或硬件模式的选择,取决于通讯协议中是否需要 NSS 控制。如果不需要,可以选择软件模式,释放一个 GPIO 管脚另作他用。 软件NSS需要自己手动拉高或置低,实际直接连接内部SPI模块,选择片选时可任意GPIO。作为主机时,能接多个从设备。 硬件NSS会自动拉高或置低,通过固定GPIO连接至SPI模块,实际上还是通过软件NSS连接到SPI模块。作为主机时,只能接一个从设备。 目前我们芯片都是使用的软件片选,每个片选脚内部已经和SPI模块连接
|