【问题标题】:How to call multiple slaves for Spi data transmission?Spi数据传输如何调用多个slave?
【发布时间】:2015-06-09 11:23:48
【问题描述】:

我有一个通用方法,其中 SDRAM 中的数据是传输 SPIC.DATA。我添加了延迟功能,以便使用采样频率调整我的数字信号。

    /* Transfer data from internal memory via SPI from Master to Slave */
        if ( (SWITCHPORTL.IN & PIN2_bm) == 0 )
        {

flip = false;
            j = 0;
            while (j < NUM_BYTES)
            {   
                if (flip == false)
                {
                    // Set slave select line low (active) for Port C
                    PORTC.OUTCLR = PIN4_bm;
                }               
                // Give the data to the data register of the Master
                SPIC.DATA = __far_mem_read(j+SDRAM_ADDR);
                if (flip == true)
                {
// wait for the 2nd 8-bit-block to be send 
-> delay 0.7us
                    _delay_us(0.7);         
                    // Set slave select line high (inactive)
                    PORTC.OUTSET = PIN4_bm;
                // delay to adjust to sampling frequency 
100 kHz -> 6.9us; 200kHz -> 1.9us
                    _delay_us(1.9);                                 }
                flip = !flip;
                j++;
            }   


        }  

我如何为此调用两个从设备选择,以便 SDRAM 中的数据应该一个接一个地交替传输到这两个从设备?让我们考虑存储在 SDRAM 中的数据为 A1A2A3A4A5 等,所以 A1 A3 A5 ... 是一组数据应该传输到我的奇数从机选择和 A2 A4 A6... 是偶数组数据到其他从机。

【问题讨论】:

  • 您能说说您使用的是什么微控制器吗?有 100 种不同的 AVR。
  • 问题不清楚。这些从机是否在同一 SPI 总线上?如果是这样,你如何在它们之间混合?看来您的代码中只有一个从选择引脚。或者这是一个“菊花链”SPI解决方案?请说明有什么硬件。
  • 应该很明显,分配给 PORTC.OUTCLR 是关键。看起来可能,鉴于 PIN4_bm 听起来像一个位掩码,您只需要使用不同的值即可在多个设备上启用 MOSI。实际价值当然取决于硬件,你不能把这样的细节放在这样的问题之外。
  • @SijoJohn 再次阅读我之前的评论。从机连接到 SPI 总线至少有 3 种不同的方式,如果你不告诉我们 MOSI、SS 和时钟是如何连接到它们的,以及你打算如何在它们之间多路复用,没人能回答。或者,如果您不知道如何连接它们,如果这是这里的实际问题,您需要在 electronics.stackexchange.com 上提问。

标签: c++ c embedded avr atmel


【解决方案1】:

正如 Lundin 所说,您需要决定如何将 slave 连接到您的控制器。 128A1 有几个选项。

  1. 使用相同的 MISO、MOSI 和 SCK 线路运行到从站。然后使用控制器上的两个不同引脚连接到从机上的使能引脚。一次启用一个设备并通过同一总线发送数据。
  2. 128A1 有四个独立的 SPI 端口。使用单独的总线将每个从机连接到不同的端口。端口之间交替发送。
  3. 您可以在微控制器上使用 USART 的 SPI 功能。

我建议选项 1 或 2。连接从站后,编程将与您已有的非常相似。

【讨论】:

  • 是的,你是对的,我想在端口 C 的同一 SPI 总线上使用从机。存储在 SDRAM 中的数据是两组不同的数据。我的意思是,我想调用对应于一个设定值的偶数位和另一个奇数位。所以这两组必须单独发送给从站。
  • 在您的总线上使用两条 EN 线路,每个设备一条。在您的循环中,在奇数字节上启用一个设备,在偶数字节上启用另一个设备。
  • 你是否可以通过位掩码启用两个从机选择,如 PORTC.OUTCLR = PIN4_bm 之类的上述代码?如果是这样,如何将 SDRAM 中的偶数位和奇数位调用到选定的从站。
  • 是否可以将 SPIC.DATA 拆分为 SPIC.DATA % 2 = =0 以实现偶数和奇数传输这些文件到两个从选择?否则是否可以对定义的函数变量做同样的事情?
猜你喜欢
  • 2020-03-15
  • 1970-01-01
  • 1970-01-01
  • 2022-11-25
  • 1970-01-01
  • 2020-12-05
  • 2015-06-23
  • 2012-11-20
  • 1970-01-01
相关资源
最近更新 更多