PSoC™ 5, 3 & 1 Forum Discussions
Why can't I see TopDesign.cydwr page tab on my PSoC3 Creator?
Hello,
I am using a PSoC 5: CY8C5888FNI-LP210 in the 99 pin BGA package. These PSoCs are coming from Mouser in factory stock condition. I understand this PSoC is shipped from the factory with a generic bootloader already installed. Please tell me if that is incorrect.
My PSoC are then mounted onto our PC board. I then program the PSoCs using the bootloader. That is, my image is a bootloadable with a .cyacd suffix. I made by bootloadable by pointing to the .hex and .elf files corresponding to the factory bootloader. I can program my boards once using a MiniProg3. I program using Bootloader Host. The units program the first time and then my program runs correctly because my board behaves correctly.
However, if I try to reprogram the boards, then programming fails with these messages:
02:40:17 PM - The slave failed to successfully acknowledge the packet.
02:40:17 PM - Communication port reported error 'Unable to write data to the target device'.
My questions:
- Is there something in the stock bootloader (maybe security) which prevents reprogramming the units?
- Is there any documentation pointing to the configuration of the stock bootloader which I could look?
Best regards,
Stuart
Show Less
This is the announcement of the custom component SerialRx v.0.0, implementing simple command line interface between UART Terminal and PSoC microcontroller.
SerialRx: command line UART interface
Using this component, human-readable UART Terminal messages can be easily received and processed by the microcontroller.
Figure 1. Project schematic. The SerialEx receives messages from the Terminal and echoes them back.
Figure 2. Terminal window showing command messages and PSoC responses. Recognized commands ('R255', 'G32', 'B64') are executed with confirmation echo sent back ('>R255', etc.). Unrecognized command ('R-1000') are ignored and an error status is reported ('!R-1000').
Show Less
Using CT8CKIT030 for development purpose.
Getting an intermittant Reset that is not as a result of my code (working with defaults) and experiencing variables being set to values which indicate a Reset has occurred.
CyResetStatus returns all zeroes. Understand that a PRES is not included in the CyResetStatus save; thus a PRES is the probable culprit.
Using an ADC DeltaSig which turns on PRES. I have an external 4096Vref that I monitor to provide an emperical correction of the ADC results and also use the Offset with a volts conversion to fine tune any variations (an oscilloscope shows Vdda has variation and I use the ADC Vdda to Vddd {set at 5 volts] to reduce granularity. So basically I don't feel that the ADC PRES activation is necessary in my case.
Steps taken:
WDT not activated (turned off my code). No change noted.
Next attempt was to also include a 9v battery with the wall power jack contacts jumpered to make the battery functional with the plug inserted. Results were inconclusive.
Next attempt was to include a UPS to prevent utility power glitches to not cause a Reset (UPS was capable of backing up a small load and should switch in ~40 seconds). Results were encouraging but not a total success.
Latest attempt was to add a 47ufd 50v ceramic cap to Vin on an external board. This showed the most improvement but was not 100% effective.
Can the 5v Vdda and/or Vddd also have a filter capacitor added ala the Vin cap?
All sugestions for a resolution are wecome.
I can not live with my system occaisionally Resetting as it is a Data Acquisition AND Control project.
Show LessHello,
I am using a PSoC 5: CY8C5888FNI-LP210 in the 99 pin BGA package.
I receive the devices assembled on my PCB with the stock Cypress bootloader already present on the chip. I create my own I2C bootloader by instantiating bootloader object in my GUI design, and also instantiate an I2C object. I then build my bootloader to create the .hex and .elf files
I then build my actual design using PSoC Creator 4.4. In my project I put a bootloadable object in the GUI and then make it depend on the .hex and .elf files created above. Then I build my project the usual way.
But when I try to program the chip using "bootloader host" I get this error: "The bootloader reported error 'Packet length invalid: the packet's length does not conform to the required packet format, see the Bootloader section in the System Reference Guild for the correct format'."
What should I look for in order to understand why my image is not compatible with the stock Cypress bootloader? Any clues about what to look for? Any tools to run? Any files to look at?
Stuart
Show Less
Hi there,
I installed Windows 11 inside a virtual machine on my Macbook M2, and the drivers for KitProg don't work. I can select the drivers from "C:\Program Files (x86)\Cypress\Programmer\drivers\KitProg" but Windows doesn't take it.
Any help?
The CY8CKIT-063 is working without any issue.
Show LessI'm developing a PCB based around the PSoC 3, and I'm very confused about an error I'm getting, because from everything I can see, I've done things right - perhaps I missed something obscure?
The error:
I included the warning I'm getting as well, since the two pertain to the same thing. As best I understand it, there needs to be a function prototype before the main(), specifically, "CY_ISR_PROTO(UART_ISR);", but it's definitely there. I don't understand what I'm missing.
Full code pasted below:
#include <project.h>
#include <stdio.h>
#include <stdlib.h>
#define MAX_LENGTH 20
#define START_CHAR 'A' // Change this to the specific character you want to check
char received_string[MAX_LENGTH];
char buffer[20]; // Buffer to hold the integer in string format
int string_index = 0;
int start_flag = 0;
CY_ISR(UART_ISR)
{
while(UART_GetRxBufferSize() > 0 && string_index < MAX_LENGTH - 1)
{
char received_char = UART_GetChar();
if (!start_flag && received_char != START_CHAR) {
continue; // Ignore data if the first character does not match the specific character
}
start_flag = 1; // Set the start_flag after the specific character is received
received_string[string_index] = received_char;
if(received_string[string_index] == '\r') // Stop receiving at '\r'
{
received_string[string_index] = '\0'; // Null-terminate the string
start_flag = 0; // Reset the start_flag for the next string
UART_PutString("Received string: ");
UART_PutString(received_string);
UART_PutString("\r\n");
// Decode the received hexadecimal string
if (received_string[0] == START_CHAR) {
long int decoded_value = strtol(received_string + 1, NULL, 16); // Skip the first character
UART_PutString("Decoded value: ");
sprintf(buffer, "%ld", decoded_value);
UART_PutString(buffer);
UART_PutString("\r\n");
}
string_index = 0; // Reset the string index for the next reception
}
else
{
string_index++;
}
}
}
CY_ISR_PROTO(UART_ISR);
int main(void)
{
CyGlobalIntEnable; /* Enable global interrupts. */
/* Start UART component */
UART_Start();
UART_ClearRxBuffer();
/* Start the ISR */
isr_UART_StartEx(UART_ISR);
for(;;)
{
//Paste system code here
}
}
I learn linker script recently and there are two commands which confused me. They are EXTERN and PROVIDE. In these article, it said EXTERN is force symbol to be entered in the output file as an undefined symbol. I try to add EXTERN(test) in the linker script and why can it compile and link successfully? I mean the test is undefined symbol, why can it link without any error? And for PROVIDE command, in my understanding, it is mainly avoid multiple definition and I try to add symbol test = .(without PROVIDE)in data section of linker script and declare variable int test in my source code, but why there is no error when linking? Shouldn't it be multiple definition error?
Show LessI experimented enough to use 2 pins as toggling analog input voltage to a PSOC5 Opamp without using external components or internal components.
You set them up to do both digital input and analog, with pull up/down resistors. You can then write a pattern to the 2 pins to get internally, 0v, 5v, 2.5v. Exactly 2.5v requires external resistor to +5v.
This can almost be done with a DAC, but you are limited to 4.08v.
See the following page for more info. I used a LooUpTable to correctly drive the pins in real time. Here is my blog about the psoc and other things: https://socmaker.com/?p=1598
Show Less
Explanation: (See TLDR if busy)
I am working on a rather complicated design. The UDB system is 82.5% full. I came across a warning, which in Xilinx world is devastating, but in PSOC5 world, not so much:
The bus clock must be the clock source when configuring a fixed-function timer/counter, "\POS_TIMER:CounterHW\", to run at a frequency equal to the bus clock (24 MHz).
(App=cydsfit)
There is no "Bus Clock" available in the selection of clock sources. There is no option I can choose that does not continue to give me either this warning, or an error like the following: (I tried various solutions and a 12mhz clock and a Sync component)
ADD: fit.M0031: error: Clock Error: (The MASTER_CLK's range '24 MHz +/- 0.25%, (23.94 MHz - 24.06 MHz)' intersects with clock_12mhz's range '24 MHz +/- 0.25%, (23.94 MHz - 24.06 MHz)'. A clock that does not derive directly from the MASTER_CLK cannot have its frequency intersect with that of the MASTER_CLK.).
Now, in my case, the Async nature of the clock is of no consequence. It is for two timers that count down for a blanking period, and the specs are extremely loose. It works without issues over a great temperature range. The Async error is not listed in the timing Web page until I drill deep into it, and it shows a lag of about 10ns, which not a problem for the job being done.
TLDR;
Bus clock must be used to run Timer Counter at Bus Clock frequency.
But, there is NO "bus clock" available in PSOC Creator, and if you choose the various clocks, you get another error that won't go away.
If you try to use the patented Sync function, you get an error that you can't use that clock, as it is not derived from the master clock.
How do you specify a bus clock when that selection is not available? How do you use a 24mhz clock from the selections that are available when the ones that *might* be a bus clock generate an error?
This is almost a rhetorical question, but I am curious as to how I should make this work in the future when I come across it in a critical situation.
I am stuck with a low speed bus clock for the moment, as this also has to run at 300 degrees F, which is way outside of the part specs. (Yes, I do understand. We replace the parts from time to time. Cost of doing business.)
Thanks!
P.S.
After 2 years + of I*n trying to put our company out of business, the Cypress created PSoC 5's are finally available again. I*n may have wanted our company to go away, since we are trash under their feet, but the company survived, and NOT through any help from I*n. Let's just say there are now alternatives out there, but none as good as the Cypress created PSOC3 & 5 family.
The I*n system also locked my old account due to the transition from Cypress killing my old password. Somehow info got lost inside I*n system, so I created a new login. Not a problem.
Show Less