我正在尝试从连接到启动板的Bus Pirate中获取明智的信息(使用Sparkfun电缆:橙色变为P1.6,黄色变为P1.5。除非我对MOSI和MISO感到困惑,否则这应该是正确的...)。我没有连接CS,因为我只是在使用海盗车监视任何东西。
总线盗版设置为SPI,125KHz,时钟极性空闲低,输出时钟边沿有效到空闲,输入采样相位中间,/ CS,输出正常。
在启动板上,我有一个没有外部晶体的MSP430G2231。使用Code Composer Studio,我可以进行以下操作:
#include "msp430g2231.h"
volatile unsigned char value=0;
#pragma vector=USI_VECTOR
__interrupt void universal_serial_interface(void)
{
value+=1;
USISRL=value;
USICNT=8;
}
void main(void){
WDTCTL = WDTPW + WDTHOLD;
BCSCTL1 = CALBC1_1MHZ; // Set range
DCOCTL = CALDCO_1MHZ;
BCSCTL2 &= ~(DIVS_3);
USICTL0 |= USIPE7 + USIPE6 + USIPE5 + USIMST + USIOE;
USICTL1 |= USIIE;
USICKCTL = USIDIV_3 + USISSEL_2;
USICTL0 &= ~USISWRST;
USISRL=value;
USICNT = 8;
__bis_SR_register(LPM0_bits+ GIE);
}
大部分都是从各种样本中拼凑而成的。仔细阅读数据表后,虽然我没有测量范围,但似乎USI时钟设置为以125KHz(1MHz的SMCLK除以8)运行。
运行时,我从海盗那里得到了本质上是垃圾的东西。P在USI中断向量的第一行上设置了一个断点,并使其经历了3次,因此我应该从海盗那里得到0、1、2
0x00(0x00)0x00(0x00)][0x40(0x00)]
让它自由运行,我得到的是这样的东西:
[0xFF(0x00)][0x3F(0x00)][0x7F(0x00)][0xBF(0x00)][0xC0(0x00)0x00(0x00)][0x40(0x00)0x80(0x00)]
仍然看起来与我的期望不符。
我花了整个晚上的大部分时间浏览芯片的用户指南,但仍然感到困惑。
在撰写本文时,我发现可以将Bus Pirate用作逻辑分析仪(使用LogicSniffer),并进行设置。并修改了程序,将0x55写入USISRL
,然后将更USIDIV
改为,USIDIV_4
以减慢速度,这是结果:
时钟信号看起来不错,LogicSniffer报告说它约为285KHz ...而MOSI是...特别的。我期望有一个很好的交替模式,因为我要写0x55,仅此而已。
有人对我可能做错的事情有任何想法吗?芯片不良?还有吗
编辑:好吧,我这方面有些白痴。我没有更改在中断中写入SPI的值。这样做会产生预期的模式:
但是,回到尝试写出递增字节会给我带来垃圾:
所以,我仍然有一个问题,只是没有我想的那么大...
编辑2:由于以下评论,我将之前未连接的Bus Pirate电缆的地线与电源(Sparkfun的试验板电源)的地线绑在一起。以前,他们共享的最近地点是回到USB集线器中,我将所有这些设备都挂掉了。
这消除了运行计数器程序时MOSI的毛刺,并且LogicSniffer现在可以自行正确解码字节了:
处于监视模式的总线海盗仍然报告奇怪的结果:
[0x00(0x00)][0x04(0x00)][0x06(0x00)][0x10(0x00)][0x10(0x00)][0x10(0x00)][0x12(0x00)][0x18(0x00)]
似乎能够更好地检测到写入的结尾(我假设这就是方括号定界的内容),但是要解码的数据仍然不可用。我现在不太担心波形看起来更好,但是知道为什么Bus Pirate变得困惑仍然很高兴。
while(1);
main()末尾的或等价物来阻止它退出并做随机的事情。