El diseño esclavo es libre de hacer cualquiera de las dos cosas.
Un esclavo puede usar el SPI_SCK entrante para sincronizar sus registros internos de desplazamiento de datos que se conectan a SPI_MOSI y SPI_MISO. Esto simplifica el circuito esclavo ya que no requiere un oscilador local o una fuente de reloj separada. La desventaja es que solo puede tener un comportamiento simplista cuando SPI_SCK está inactivo entre transferencias o de mala calidad / roto. Esto puede no importar en muchas aplicaciones.
O un esclavo puede tratar SPI_SCK como un indicador de estado de bus y sobreexplotarlo utilizando un reloj de lógica local más rápido, para identificar sus flancos ascendentes y descendentes. Sin embargo, tiene que haber una relación bastante alta entre el reloj local y el SPI_SCK entrante, al menos 2: 1, pero preferiblemente 4: 1 o más. Esto puede ser prohibitivo en diseños con una alta frecuencia SPI_SCK. Cuando se usa, el esclavo tiene un comportamiento más complicado para el manejo de errores, etc. y evita cualquier otro cruce de dominio de reloj interno.
Hay más de lo que he resumido aquí, pero esa es la esencia de esto. Casi siempre he usado este último método y sobreexplotado SPI_SCK. Ha sido muy confiable, pero he tenido el lujo de las aplicaciones FPGA / CPLD con las puertas disponibles, un reloj local rápido y un SPI_SCK mucho más lento.
Puede obtener una idea de cómo lo está haciendo un IC a partir de las especificaciones de tiempo en la hoja de datos. Si indica la frecuencia máxima de SPI_SCK en relación con la frecuencia del reloj local, puede estar sobre muestreando SPI_SCK y utilizando el reloj local. Por supuesto, puede haber otra razón por la que se establezca de esa manera, como que los circuitos de reloj local tienen que servir o almacenar datos para los circuitos de interfaz en serie SPI_SCK. Pero puede ser claro y puede que simplemente te lo diga en el texto de la hoja de datos de todos modos.